一面:(30min)
1、内存泄露怎么排查
2、handle机制
3、两个activity怎么通信
1、Android实现跨进程通信 慕课网实战 https://www.imooc.com/learn/1195
Binder、AIDL、Messenger的技术背景、应用场景和底层实现
Android IPC通信实战之AIDL
Android IPC通信实战之Messenger
Android IPC通信实战之Messenger
2、代码:
在自己的github仓中
3、学习点:
Android多进程开发的应用以及注意点
Android中跨进程通信的主要方式以及Binder机制的底层实现
AIDL Messenger的实现原理(oneway、in、out、inout)
Why:
系统资源紧张(OOM)
应用架构臃肿(Webview、推送、后台任务)
监听保活
Different:
Application生命周期会再次执行(onCreate)
数据共享失效(对象、单例、回调)
进程间通信(文件、Intent、AIDL)
进程是系统分配的最小单位,进程间通过内核提供的机制完成数据交换,称之为进程间通信(IPC,Inter process Communication)
Linux跨进程通信方式:六种
管道:亲缘进程、半双工、大小为1页=4KB
匿名管道:父子进程或者兄弟进程之间
有名管道:基于缓冲区进行实现,从头开始读,写入末尾、数据只能一个方向流动,双方通信需要两个管道,用于轻量级的通信。
存放在内核中的消息链表,多进程读写、随机查询;
有消息标识符,只有在内核重启或者删除下才消失。
内核存储发送,对于中断机制的模拟。
Linux系统中用于进程间相互通信和操作的一种机制,在任何时候发送给某个进程,无需知道另外一个进程的状态,若当前进程处于未执行状态,信号则被内核保存起来,内核进程可执行后,内核才把可执行的存储发送出去,信号是软件层次上对中断的模拟。
效率最高,需要同步。
IPC中效率最高的机制,多个进程直接读区同一块内存空间,内核中有专门的内存去,可以由需要访问的进程将其映射到自己的私有地址空间,不用拷贝,可提高效率,但由于多个进程读取同一块内存,需要同步机制(信号量)。
计数器、进程间同步,PV操作。
计数器、用于多进程对共享数据的访问进行控制,意图:进程间同步,信号量增减是原子操作,由内核实现。
c/s结构,跨网络通信。
不同计算机或者相同计算机之间的通信。
C/S架构、稳定性好,(不需要考虑进程间同步的问题,)优于共享内存方式
性能较好:数据拷贝次数只有一次,优于管道、消息队列、Socket
安全性高:UID/PID可见


AIDL(基于Binder)
Intent、Messager、ContentProvider(基于AIDL)
文件共享
定义IPC过程中接口的一种描述语言;
A IDL文件在编译过程中生成接口的实现类,用于IPC通信;
支持基本数据类型,实现Parcelable接口的对象,包括List、Map;
基于Handler、Message实现;
串行实时通信;
传送Bundle支持的数据类型
connect
disconnect
isConnected
sendMessage
registerMessageReceiverListener
unRegisterMessageReceiverListener
github的My Application的com.Demo.Service.AidlIpc中
慕课网实战





安卓接口定义语言参考:https://blog.csdn.net/lentolove/article/details/120145230