lastActivityTime 指这个进程的最后活动时间,那如果我们启动一个activity,
这个字段肯定会更新,
所以我们先在源码中搜索对 lastActivityTime 赋值的地方,然后我们在这个赋值的地方构造一个人为的异常如下:
if(app.processName.equals("com.example.test2")){
String a =null;
a.length() ;
}
然后编译安装,运行这个 activity,果然报错了,如下:
updateLruProcessLocked 到 attachApplicationLocked 然后到 attachApplication ,
attachApplication 这个方法是一个IPC调用 ,那是哪里调用了它呢?
我们在系统源码中 用 grep搜索 attachApplication ,发现调用它的只有一个地方: base/core/java/android/app/ActivityThread.java 的 attach 方法。
然后 main 调用 attach 方法 , 大家都知道 ActivityThread 的 mian 是整个进程 的入口方法,是被 Zygote fork出来的,所以实质就是你调用 ActivityManagerService 的 startActivity 来启动 一个Activity A, ActivityManagerService 会启动这个Activity A所在的进程B,进程B开始执行 ActivityThread的mian方法,然后这个mian方法会跨进程调用到 ActivityManagerService 的 attachApplication 方法 ,然后去更新这个进程对应的ProcessRecord 的 lastActivityTime 的值 。
欢迎评论。