ActivityManagerService 分析之 ProcessRecord 的 lastActivityTime 字段分析

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 的值 。

欢迎评论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值