问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

Android 进程间通信的几种实现方式

发布网友 发布时间:2022-04-20 04:54

我来回答

3个回答

热心网友 时间:2023-08-19 11:12

Android 进程间通信的几种实现方式

主要有4种方式:

这4种方式正好对应于android系统中4种应用程序组件:Activity、Content Provider、Broadcast和Service。

主要实现原理:

由于应用程序之间不能共享内存。为了在不同应用程序之间交互数据(跨进程通讯),Android SDK中提供了4种用于跨进程通讯的方式进行交互数据,实现进程间通信主要是使用sdk中提供的4组组件根据实际开发情况进行实现数据交互。

详细实现方式:

Acitivity实现方式

Activity的跨进程访问与进程内访问略有不同。虽然它们都需要Intent对象,但跨进程访问并不需要指定Context对象和Activity的 Class对象,而需要指定的是要访问的Activity所对应的Action(一个字符串)。有些Activity还需要指定一个Uri(通过 Intent构造方法的第2个参数指定)。 在android系统中有很多应用程序提供了可以跨进程访问的Activity,例如,下面的代码可以直接调用拨打电话的Activity。

Intent callIntent = new  Intent(Intent.ACTION_CALL, Uri.parse("tel:12345678" );  
startActivity(callIntent);


Content Provider实现方式

Android应用程序可以使用文件或SqlLite数据库来存储数据。Content Provider提供了一种在多个应用程序之间数据共享的方式(跨进程共享数据)

应用程序可以利用Content Provider完成下面的工作

1. 查询数据
2. 修改数据
3. 添加数据
4. 删除数据

Broadcast 广播实现方式

广播是一种被动跨进程通讯的方式。当某个程序向系统发送广播时,其他的应用程序只能被动地接收广播数据。这就象电台进行广播一样,听众只能被动地收听,而不能主动与电台进行沟通。在应用程序中发送广播比较简单。只需要调用sendBroadcast方法即可。该方法需要一个Intent对象。通过Intent对象可以发送需要广播的数据。


Service 实现方式

常用的使用方式之一:利用AIDL Service实现跨进程通信

这是我个人比较推崇的方式,因为它相比Broadcast而言,虽然实现上稍微麻烦了一点,但是它的优势就是不会像广播那样在手机中的广播较多时会有明显的时延,甚至有广播发送不成功的情况出现。 

注意普通的Service并不能实现跨进程操作,实际上普通的Service和它所在的应用处于同一个进程中,而且它也不会专门开一条新的线程,因此如果在普通的Service中实现在耗时的任务,需要新开线程。

要实现跨进程通信,需要借助AIDL(Android Interface Definition Language)。Android中的跨进程服务其实是采用C/S的架构,因而AIDL的目的就是实现通信接口。


总结

跨进程通讯这个方面service方式的通讯远远复杂于其他几种通讯方式,实际开发中Activity、Content Provider、Broadcast和Service。4种经常用到,学习过程中要对没种实现方式有一定的了解。

热心网友 时间:2023-08-19 11:12

①Activity (借助Intent调用其他APP的Activity实现跨进程通信)
Android四大组件之一
Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务。
Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过setContentView(View)来显示指定控件。
在一个android应用中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity之间通过Intent进行通信。
②广播接收者(BroadcastReceiver)
Android四大组件之一,有广播接收者,与之对应要有发送者。
广播被分为两种不同的类型:“普通广播(Normal broadcasts)”和“有序广播(Ordered broadcasts)”。
普通广播是完全异步的,可以在同一时刻(逻辑上)被所有接收者接收到,消息传递的效率比较高,
但缺点是:接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播。
然而有序广播是按照接收者声明的优先级别,被接收者依次接收广播。如:A的级别高于B,B的级别高于C,那么,广播先传给A,再传给B,最后传给C 。
③内容提供者(ContentProvider)
Android四大组件之一,有提供者,与之对应也要有调用者。
④AIDL(Android Interface definition language,Android接口定义语言)
与之前三个相比,AIDL可能稍显复杂。
Service,Android四大组件之一,借助AIDL也可以实现跨进程访问服务
// IRemoteService.aidl
package com.example.android;

// Declare any non-default types here with import statements

/** Example service interface */
interface IRemoteService {
/** Request the process ID of this service, to do evil things with it. */
int getPid();

/** Demonstrates some basic types that you can use as parameters
* and return values in AIDL.
*/
void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
double aDouble, String aString);
}

这段为官方文档,可参考定义
在com.example.android包下

热心网友 时间:2023-08-19 11:12

进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区。但是,系统空间却是“公共场所”,所以内核显然可以提供这样的条件。除此以外,那就是双方都可以访问的外设了。在这个意义上,两个进程当然也可以通过磁盘上的普通文件交换信息,或者通过“注册表”或其它数据库中的某些表项和记录交换信息。广义上这也是进程间通信的手段,但是一般都不把这算作“进程间通信”。因为那些通信手段的效率太低了,而人们对进程间通信的要求是要有一定的实时性。
  进程间通信主要包括管道, 系统IPC(包括消息队列,信号量,共享存储), SOCKET.
  管道包括三种:1)普通管道PIPE, 通常有种*,一是半双工,只能单向传输;二是只能在父子进程间使用. 2)流管道s_pipe: 去除了第一种*,可以双向传输. 3)命名管道:name_pipe, 去除了第二种*,可以在许多并不相关的进程之间进行通讯.
  系统IPC的三种方式类同,都是使用了内核里的标识符来识别.
# 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
# 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
# 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
女生学java有前途吗 女生学java能做什么工作 大三女生,某中下985软工,想尽快投简历找工作,选择cpp还是j ...真心真意谢谢你有人知道什么歌名吗_百度知... 腾讯电脑管家怎么退出登录_腾讯电脑管家退出登录方法介绍 单相电机咕咕响声的原因及解决方法 这是那个动漫人物?最好给下链接或者动漫第几集~ 如何评价《你的名字。》中的宫水三叶? 你的名字中立花龙的父母亲叫什么 宜昌市发展的怎么样 宜昌有哪些污染 安卓多线程间通信和多进程之间通信有什么不同 大神救命啊 android线程间通信 handler message之类的 Android中线程与线程,进程与进程之间如何通信? Android 线程间通信有哪几种方式 续签劳动合同的流程 《员工劳动合同续签申请表》的主要内容是什么? 单位续签合同申请书的程序是怎样的 劳动合同续签申请需要注意什么呢 如何填写续签合同的申请? 劳动合同续签申请需要注意哪些问题 合同到期之后,假如还想在这个单位工作,该怎么申... 合同到期续签合同申请书怎么写 小米手表无法输入密码? 小米手表出现start界面死机小米手表出现start界面死机 小米color手表黑屏震动 红米手表屏幕锁定无法解锁 小米米动手表打不开机 小米智能手表“正在进入运动锁屏状态”如何解锁? 小米儿童手表显示一个娃娃脸开不了机 米兔儿童手表能刷机吗 面试被问到android中两个子线程怎么通信,我懵了。 android中什么时候会选择用广播来进行线程间的通信 安卓应用程序间的通讯 android开发中跨进程通信有几种方式 Android服务器通信的几种方式详解 Android子线程和子线程之间的通信是怎样的 android HttpGet 另开线程获取网络数据问题 Android主线程如何向分线程发送消息 android UI线程和子线程的几种交互方式 Android可以让主线程在其他子线程执行完后再执行吗... Android进程与线程区别 Android中的线程与进程之间的关系简单解释 乘飞机安全的注意事项有哪些? 坐飞机需要注意什么 坐飞机需要注意些什么? 乘坐飞机需要注意哪些事项 坐飞机应该注意什么? 乘坐飞机时应该注意些什么? 乘坐飞机注意事项及携带物品分别是? 乘坐飞机需要注意什么?
  • 焦点

最新推荐

猜你喜欢

热门推荐