一、开始以为是PMS的问题,但是读完PackageManagerService.java的安装流程后发现并不是这么回事。
其中比较重要的是freezePackageForInstall函数,app在替换原来的内容之前,会先冻住正在运行的app,然后发送kill命令到ActivityManagerService,在AMS中才会去kill掉app。而且adb install后提示的结果是在PackageManagerService里决定的,结果返回的是Succeed。打日志到在最后清理数据时,都是正常运行的。所以在PMS里面并没有
二、然后在AMS中的探索
发现PMS对于App的操作最后都是在AMS中进行的,冻结app、杀死app、恢复app等,然后都过是socket的方式,异步执行的。
Java代码中插入堆栈打印的方法如下:
import android.util.Log;Log.d