App启动之Application创建流程分析

本文深入探讨了Android应用程序启动过程,特别是Application的创建流程。从Zygote启动ActivityThread,到Looper、Handler的初始化,再到ActivityManagerService的attachApplication,接着是bindApplication,最终通过反射调用Application的attach()和onCreate()方法。了解这一过程对于进行冷启动优化至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在冷启动优化的时候少不了对Application的优化,所以这一篇文章是对Application的创建流程的学习。Zygote创建应用程序进程后实例化ActivityThread,ActivityThread的main方法创建Application的流程。打开frameworks/base/core/java/android/app/ActivityThread.java 我们从ActivityThread.java的main方法开始分析:

public static void main(String[] args) {

        ...
        //初始化主线程的Looper
        Looper.prepareMainLooper();
        
        ...
        //实例化一个ActivityThread
        ActivityThread thread = new ActivityThread();
        //需要关注的方法
        thread.attach(false, startSeq);

        ...
        //在主线程中运行消息队列
        Looper.loop();
    }

在main方法中使用了Handler机制,先初始化Looper,然后实例化一个ActivityThread对象,该对象中有final修饰的H内部类(该类继承Handler)并进行了实例化,最后调用Looper.loop()开启了主线程的消息循环。

接着看一下thread.attach(false, startSeq)这一段执行的代码:

  private void attach(boolean system, long startSeq) {
        sCurrentActivityThread = this;
        mSystemThread = system;//是否是系统进程
        if (!system) {
            android.ddm.DdmHandleAppName.setAppName("<pre-initialized>",
                                                    UserHandle.myUserId());
            //在RuntimeInit中设置ApplicationThread的Binder
            RuntimeInit.setApplicationObject(mAppThread.asBinder());
            //获取AMS服务
            final IActivityManager mgr = ActivityManager.getService();
            try {
                //调用AMS服务的attachApplication来启动一个Application, 需要关注的方法
                mgr.attachApplication(mAppThread, startSeq);
            } catch (RemoteException ex) {
                throw ex.rethrowFromSystemServer();
            }
            ...

        } else {
            //系统进程的处理
            ...
        }

    }

在ActivityThread的attach方法中调用AMS服务的attachApplication来启动一个Application,接下来我们看一下mgr.attachApplication(mAppThread, startSeq)。打开ActivityManagerService.java

/frameworks/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值