进程通信(binder/AIDL/Messenger)Binder机制最重要
可以看到,AIDL的核心原理其实就是我们定义的AIDL文件会编译时生成一个Java接口文件,这个文件包含了客户端、服务端的所有操作。
Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信。为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现。与很多其他的基于RPC的解决方案一样,Android使用一种接口定义语言(Interface Definition Language,IDL)来公开服务的接口。
它引用了一个Handler对象,以便others能够向它发送消息(使用mMessenger.send(Message msg)方法)。该类允许跨进程间基于Message的通信(即两个进程间可以通过Message进行通信),在服务端使用Handler创建一个Messenger,客户端持有这个Messenger就可以与服务端通信了。
以前我们使用Handler+Message的方式进行通信,都是在同一个进程中,从线程持有一个主线程的Handler对象,并向主线程发送消息。
而Android既然可以使用binder机制进行跨进程通信,所以我们当然可以将Handler与binder结合起来进行跨进程发送消息。
- 广播
避免使用隐式intent广播传递敏感信息,信息可能被其他注册了对应broadcastReceiver的App接收。
如果广播仅限于应用内,则可以使用LocalBoradcastManager#sendBroadcast实现,避免敏感信息外泄和Intent拦截风险,安全性更好,运行效率更高。