Android 进程间通信方式总结

来源:互联网 发布:小米域名多少钱买的 编辑:程序博客网 时间:2024/05/29 08:30

首先,我们要知道什么是进程。
在 Android 里面,进程是一组组件的集合。默认下,同一个应用的所有组件都运行在同一个进程中并且大多数程序不必改变这一状况.然而,如果你非要与众不同,也可以通过修改 AndroidManifest.xml 文件中修改四大组件 ( activity , service , receiver 和 provider ) 的 process 属性来指定该组件运行在哪一个进程里。
由于 Android 本身设计的原因,进程间的数据是无法直接共享的,如果我们需要知道不同进程间的一些数据,就需要进行进程间通信操作。下面总结了以下进程间通信的一些方法。

1 Activity
我们经常写类似的代码

Intent intent = new Intent();intent.setClassName("otherpackage","OtherActivity");intent.putExtra("key","value");startActivity(intent);

在 OtherActivity 里面

String value = getIntent().getStringExtra("key");

这样我们就通过 Intent 把数据共享给了 OtherActivity .

2 Broadcast
广播,通过发送端发送一个广播,接收端接收这个广播就可以实现跨进程通信,也是利用了 Intent 可以携带额外数据。

Intent broadcast = new Intent("my.broadcast.action");broadcast.putExtra("key","value");sendBroadcast(broadcast);

3 Content Provider
相信这个大家用的也不少,比如获取一个联系人的详情。联系人的详情时存在系统里面的,我们的应用一定不会和系统程序在一个进程,Content Provider 很明显就是一个跨进程通信的方法。

4 AIDL
AIDL 相信大家或多或少都接触过。 AIDL (Android Interface Definition Language) 是一种IDL 语言,用于生成可以在Android设备上两个进程之间进行进程间通信(interprocess communication, IPC)的代码。AIDL 在 2 个应用之间应用才有意义。一个 app 里面没有必要用。这里不做详细的介绍,具体的做法可以参考这篇文章 Android:学习AIDL,这一篇文章就够了(上)。

5 Messnger

This allows for the implementation of message-based communication across processes

允许实现基于消息的进程间通信的方式。具体如何做呢。

原理图

可以看到,我们可以在客户端发送一个Message给服务端,在服务端的handler中会接收到客户端的消息,然后进行对应的处理,处理完成后,再将结果等数据封装成Message,发送给客户端,客户端的handler中会接收到处理的结果。
具体的分析请看这篇介绍 Messnger 。

6 文件
是的,你没看错,就是文件,通过读写同一个文件的确是可以做到进程间通信的。

好了,先写到这里。

0 0
原创粉丝点击