Android 进程间通信方式总结

首先,我们要知道什么是进程。

在 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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值