安卓9启动Activity流程分析和优化建议

本文分析了Android 9.0版本与之前版本启动Activity的差异,指出从9.0开始使用Transaction并调整了内部流程。通过对比8.0和9.0的启动过程,阐述了startActivity的异步性质。文章还探讨了Looper的工作原理,解释了为何死循环不会导致UI卡死,并提出了启动优化建议,包括调整Message队列顺序和使用IdleHandler处理任务。
摘要由CSDN通过智能技术生成

思考如下问题:

1、Android9和之前版本startActivity的差异?

2、为什么startActivity是异步的?

3、为什么安卓Looper死循环不会导致UI卡死?

Android从9.0版本开始修改了启动Activity部分流程, 跟以往版本的主要区别在于使用Transaction并删除了ActivityThread内部类H中100~109的code。

从Android8.0开始使用AIDL替换Binder实现系统进程(SystemServer)和应用进程之间的通讯。

Android9时序图

Android9.0版本startActivity后会在clientTransaction.addCallback函数传入LaunchActivityItem对象。

final boolean realStartActivityLocked(ActivityRecord r, ProcessRecord app,
            boolean andResume, boolean checkConfig) throws RemoteException {
        }   
 ......
clientTransaction = ClientTransaction.obtain(app.thread,
                        r.appToken);
                clientTransaction.addCallback(LaunchActivityItem.obtain(new Intent(r.intent),
                        System.identityHashCode(r), r.info,
                        // TODO: Have this take the merged configuration instead of separate global
                        // and override configs.
                        mergedConfiguration.getGlobalConfiguration(),
                        mergedConfiguration.getOverrideConfiguration(), r.compat,
                        r.launchedFromPackage, task.voiceInteractor, app.repProcState, r.icicle,
                        r.persistentState, results, newIntents, mService.isNextTransitionForward(),
                        profilerInfo));
   ....
}

Android9.0以前版本直接调用ActivityThread的scheduleLaunchActivity方法发送LAUNCH_ACTIVITY消息。

final boolean realStartActivityLocked(ActivityRecord r, ProcessRecord app,
           boolean andResume, boolean checkConfig) throws RemoteException {

       ......

        app.thread.scheduleLaunchActivity(new Intent(r.intent), r.appToken,
                   System.identityHashCode(r), r.info,
                   // TODO: Have this take the merged
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值