浅谈AIDL
2020-03-08 本文已影响0人
嘿_叫我小王
今天我们采用WWH(what why how)的方式来复习一遍AIDL。
AIDL是什么
AIDL就是Android中 IPC 方式之一,接下来我们来讲一下IPC
IPC 跨进程通信
IPC(Inter-Process Communication,跨进程通信):指两个进程之间进行数据交换的过程。
进程和线程
- 进程:具有一定独立功能的程序,是系统进行资源分配和调度运行的基本单位。每一个Android应用可以理解为一个进程,但一个应用也可以设置多个进程。(在AndroidManifest中给四大组件指定属性android:process开启多进程模式,在内存允许的条件下可以开启N个进程。
通常情况下,这个属性的值应该是”:“开头。表示这个进程是应用私有的。无法在跨应用之间共用。
如果该属性值直接以小写字母开头,表示这个进程为全局进程。可以被多个应用共用。- 线程:线程是CPU调度的最小单位,如果把进程理解为逻辑上操作系统所完成的任务,线程则表示完成该任务的许多可能的子任务之一。Android中分主线程和子线程,UI更新只能在主线程中进行。
- 关系:一个进程可有多个线程,至少一个(主线程);一个线程只能属于一个进程。同一进程的所有线程共享该进程的所有资源。不同进程的线程间要利用消息通信方式实现同步。
- 区别:进程有独立的地址空间,而多个线程共享内存;进程具有一个独立功能的程序,线程不能独立运行,必须依存于应用程序中;
多进程
为什么要用到多进程呢?
在Android系统中一个应用默认只有一个进程,每个进程都有自己独立的资源和内存空间,其它进程不能任意访问当前进程的内存和资源,系统给每个进程分配的内存会有限制。如果一个进程占用内存超过了这个内存限制,就会报OOM(内存溢出)的问题,很多涉及到大图片的频繁操作或者需要读取一大段数据在内存中使用时,很容易报OOM的问题,为了彻底地解决应用内存的问题,Android引入了多进程的概念,它允许在同一个应用内,为了分担主进程的压力,将占用内存的某些页面单独开一个进程,比如视频播放页面,频繁绘制的页面等。
多进程的优点
多模块进程,可以保证该模块崩溃不会导致主进程崩溃从而导致APP退出。
多进程的缺点
当一个APP启用了多进程后,系统会为不同的进程分配不同的内存空间,因此所有需要通过内存共享的行为都会失败。另外,还会导致以下几个问题:
- 进程:Application会被多次创建,因为系统会为每一个进程分配独立的内存空间。
- 线程:线程同步失效,因为不同进程中的线程同步锁不是同一个对象。
- 内存:单例模式和静态变量失效,因为不同进程间的内存空间不同。
- 存储:SharedPreferences可靠性下降,因为系统对SharedPreferences有一定的缓存策略,多个进程同时读写可能会造成数据丢失。
那我们就继续来谈AIDL!
IPC的7种方式对比.jpg重头戏!AIDL的使用
参考网址
首先创建两个APP项目(也可以是两个demo),一个作为客户端client,一个作为服务端server,实现以下功能:
1.客户端向服务端提交数据
2.服务端接收数据并返回累计提交的数据
3.客户端 服务端 接收到数据后更新UI显示数据
我把demo 放在我的GitHub,大家可以下载下来参照
那今天的分享就到这里了!