android进程间通信--Binder

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/h247263402/article/details/51471075

深入理解之进程间通信–Binder

同一个程序中的两个方法能够直接调用的根本原因是处于相同的内存空间中。两个不同的应用程序因为不在同一个进程中,他们是没有办法直接通过内存地址来访问到对方的函数和变量的。同一个进程中对象的传递是传递的内存地址,这个地址并不是真正的物理地址,而是逻辑地址,在其他进程中是没有意义的。既然没有办法直接的访问对方进程的内存空间,那有没有间接的方法呢?这就是Binder所要做的工作!

6.1智能指针

……..

6.2进程间的数据传递载体—Parcel

由于采用了虚拟内存机制,两个进程都有自己独立的内存地址空间,所以跨进程传递的地址值是无效的。Parcel的英文直译是打包,是对进程间数据传递的形象描述,在A进程中将某对象占据的内存相关数据打包起来,寄给进程B,由B在自己进程空间中复现。

遵循Parcelable协议的对象可以通过Parcel来存取,如开发人员经常用到的bundle就是继承自Parcelable的,在Android应用开发中经常用到bundle来打包数据。bundle的最大特点就是采用键值对的方式来存储数据,并在一定程度上优化了读取效率。

Active Object一般情况对象打包跨进程传递的只是对象的内容,而Active Object写入的则是他们的特殊标志引用,在取出时看到的是原来被写入的实例。目前只有两类对象可以以这种方式传递,Binder和FileDescriptor。

6.3Binder驱动与协议

…….

6.4“DNS”服务器

……..

6.5Binder 客户端—Binder Client

Binder是一种进程间通信机制,Binder的最大“消费者”是Java层的应用程序,Android系统在底层Binder机制的基础上做了进一步的封装来满足应用程序的研发需求,从而使开发者不关心Binder的内部细节就可以实现各种跨进程的交互功能,Android做的如此完美以至于我们并没有感觉到进程间通信的痕迹。

我们从Android组件中看出端倪。
Activity 通过startActivity可以启动目标进程。
Service 任何应用程序都可以通过StartService或bindService来启动特定的服务,不论是不是跨进程的。
Broadcast 任何应用程序都可以通过sendBroadcast发送广播,无论广播处理者是否在同一进程。
Intent

猜你喜欢

转载自blog.csdn.net/h247263402/article/details/51471075