最近在学习Android插件化开发,其实最早最插件化开发的理解就是:比组件化开发高一级。抱着提高能力的态度,买了本插件化开发书《Android插件化开发指南》,接下来的博客都将是Android插件化开发的相关知识。
通过这几天的学习和查找资料,慢慢的对插件化发生了改变,其实最早插件化做的热修复比较多,也就是线上修复BUG一类的,后来出现了RN以及热修复框架,特别是RN的跨平台。好像AndroidP之后对插件化开发影响挺大的,但是我觉得还是应该学习插件化,因为知识是不会变的,知识就那么多,变化万千而已。
本篇博客以及接下来的几篇博客将讲述Android底层相关知识,为插件化开发作准备。
Binder
Binder目的是为了解决跨进程通信。网上很多都是关于Binder的博客,说实话看的云里雾里,说白了就是看不懂C++。
1: Binder分为客户端client和服务端server两个进程。
关于客户端和服务端的定义:假如有两个进程:A和B。如果进程A想进程B发送消息,此时进程A就是客户端client,进程B就是服务端server。如果进程B向进程A发送消息,此时进程B就是客户端client,进程A就是服务端server。 说白了就是:谁发送消息谁就是客户端,谁接受消息,谁就是服务端。
2: Binder的组成。
既然是两个进程通信,那么中间需要这个Binder。通常服务端server会注册在一个ServiceManager中,然后,每一次客户端发送消息,都是通过Binder在ServiceManager中查找服务端,然后再通过Binder 驱动相应相应数据。所以说Binder组成:client,server,ServiceManager以及Binder。
3:Binder是怎样通信的
假如此时server端有一个add方法,那么服务端想调用这个方法,步骤如下:
- 首先服务端在ServiceManager中注册。
- SM会返回给客户端一个代理对象,这个代理对象就是Server端,不会直接返回Server,
- client端通过这个代理对象间接调用server 端的add方法。
示例图如下:
总结:Binder就是为了解决进程间通信。
AIDL
AIDL的原理就是Binder通信。对于AIDL的简单使用可以看下之前博客: