Android进阶(三):Application启动过程(最详细&最简单)

本文详细剖析了Android 8.0系统下Application的启动过程,从ActivityThread初始化到handleBindApplication函数,涵盖ActivityThread、ActivityManagerService和Instrumentation的角色。通过对源码的解读,阐述了如何创建和启动Application,以及Instrumentation在跟踪应用生命周期中的作用。
摘要由CSDN通过智能技术生成

1.前言

  • 最近一直在看 《Android进阶解密》 的一本书,这本书编写逻辑、流程都非常好,而且很容易看懂,非常推荐大家去看看(没有收广告费,单纯觉得作者写的很好)。
  • 上一篇简单的介绍了Android进阶(二): 应用进程启动过程,最终知道了ActivityThread就是代表应用进程
  • 今天就介绍ActivityThread启动之后,是如何启动 Application (基于Android 8.0 系统)。
  • 文章中实例 linhaojian的Github

2.Application启动过程的时序图

Application启动流程.png


3.源码分析

3.1 ActivityThread初始化
public static void main(String[] args) {
   
        //...
        //创建ActivityThread对象 & 调用attach()
        ActivityThread thread = new ActivityThread();
        thread.attach(false, startSeq);
        //创建主线程的Handler
        if (sMainThreadHandler == null) {
   
            sMainThreadHandler = thread.getHandler();
        }
        if (false) {
   
            Looper.myLooper().setMessageLogging(new
                    LogPrinter(Log.DEBUG, "ActivityThread"));
        }
        // End of event ActivityThreadMain.
        Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
        //创建主线程的Looper
        Looper.loop(); 
}
  • 主要做了2件事,实例化ActivityThread & 创建主线程Handler与Looper接收信息
3.2 ActivityThread的attach函数
    private void attach(boolean system, long startSeq) {
   
        //...
            RuntimeInit.setApplicationObject(mAppThread.asBinder());
            // 获取ActivityManagerService的代理对象
            final IActivityManager mgr = ActivityManager.getService();// 1
            try {
   
                //通知AMS进行application的初始化
                mgr.attachApplication(mAppThread, startSeq);// 2
            } catch (RemoteException ex) {
   
                throw ex.rethrowFromSystemServer();
            }
    }
  • 注释1:获取ActivityManagerService的代理对象
  • 注释2:通过代理对象调用attachApplication(),获取启动application所需信息(应用进程相关数据)
3.3 Ac
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值