两个不同进程中的两个线程进行通讯,并没有那么简单,这是因为两个独立的进程不能共享内存,这样一来 Handler 对象不能在两个线程上执行来实现通讯。
这时候 Binder 登场了,可以帮助我们实现跨进程的通讯。可以说 Binder 是 Android 底层系统的一个特色了,它很好地解决了进程间通讯的问题。
我们就来看看是如何通过 Binder 这个机制来实现跨进程通信的。
RPC框架远程调用的实现方式在原理上是比较简单的,即将调用的方法(接口名、方法名、参数类型、参数)序列化之后发送到远端,在远端反序列化之后调用接口的实现类的方法(接口主要是为了使用动态代理)。
所以我们在实现RPC框架的时候需要选择合适的序列化与反序列化方式
AIDL 是接口定义语言,AIDL的作用是让你可以在自己的APP里绑定一个其他APP的service,这样你的APP可以和其他APP交互
通过一个小示例,我们来解释一下是如何实现跨进程通讯的
然后创建我们需要service
如果这找不到刚刚创建好的 IRemoteInterface 可以重新构建项目 Build > Rebuild Project。然后就能找到了
大家可以自己测试一下。
彩蛋
别走开,还有另一种方法,来实现发送方法和数据给远端的进程,就是使用 Messager 对象,这显得更容,但是由于是单线程,因此也更慢。一个 Messager 对象持有对他所在进程中的 Handler 的引用,然后另一个进程进一步对他进行处理。
网友评论