之前对Android跨进程通信有些许了解,但是没有在业务场景中实现,近来因为公司业务需要用到跨进程通信,故而将这部分前前后后学了一遍,现在将自己的学习心得记录下来,与大家分享。好了,进入正题。
进程是什么?
进程是一个具有独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度的一个独立单位,简单来说进程就是一个运行中的程序,例如许多单进程APP就是一个进程。
为什么要使用多进程?
回答这个问题之前,读者可想一下为什么要使用多线程?线程与进程之间有什么关系?这里笔者就不再赘述了,不太明白的读者请阅读Android官方文档【https://developer.android.google.cn/guide/components/processes-and-threads.html】
- 为应用申请更大的内存分配,Google原生OS为每一个进程分配了16M内存(经过深度定制的系统可能比16M要大),默认情况下APP都是单进程,就是只有16M的内存空间可用,对于那些多图片的应用稍有不慎就会内存溢出(Out of memory)导致应用crash,造成很差的用户体验。那么使用多进程后就可为APP多分配到内存空间,例如由单进程增加到双进程,16M*2=32M,应用增加了一倍内存空间供开发者和使用者霍霍;
- 防止主进程被杀死即保活,很多情况下应用会有这样的需求即保持应用常驻内存不被系统杀死,从而进行推送等操作。虽然单进程中有很多保活措施,但是随着Android系统限制越来越严格,很多情况下单进程很容易被杀死,如果多加一个守护进程与主进程相互监督,无论哪一个被杀死另一个立即唤醒,这样可进一步达到保活的目的(微信貌似就是使用的此手段);
- 分担主进程的压力,现在的应用功能、加载的资源等越来越多,如果将所有工作都放在一个进程中,响应速度、内存空间等都会吃紧,故而尽量将任务分给不同的进程来完成,例如可以单独起一个进程来接收推送消息,多图片应用使用独立进程来加载图片等。
为什么要进行进程间通信?
认识了上述使用多进程的作用后,这个问题也比较好理解。进程间通信主要是为了状态同步和数据共享。举个栗子,守护进程和主进程相互监督来达到保活的目的就是一种状态同步;使用独立进程来加载图片怎么显示在UI主进程中?那必须将独立进程的数据传送给主进程呗,这就是数据共享。总之,读者可以这么理解,应用将一个任务分配个不同进程,最终要将不同进程产生的结果汇总才可以实现某一功能,汇总即通信。
好了,进程篇先开个头,休息一下,做做眼保健操进入第二篇。
(大过年回家竟然在撸代码,觉得不错就点个赞吧)