Activity启动流程

从任意进程starActivity开始,先上图

  1. X进程的先从SystemServerManager拿到ATMS对象

  1. 通过ATMS 的 startActivityAsUser 启动

  1. 中间经过ActivityStarter RootWindowContainer (Activity栈计算,生命周期计算,参数解析,构建事务) 最终进入ActivityStackSupervisor 执行 startSpecificActivity

    void startSpecificActivity(ActivityRecord r, boolean andResume, boolean checkConfig) {
        // Is this activity's application already running?
        final WindowProcessController wpc =
                mService.getProcessController(r.processName, r.info.applicationInfo.uid);

        boolean knownToBeDead = false;
        if (wpc != null && wpc.hasThread()) {
            try {
                realStartActivityLocked(r, wpc, andResume, checkConfig);
                return;
            } catch (RemoteException e) {
                Slog.w(TAG, "Exception when starting activity "
                        + r.intent.getComponent().flattenToShortString(), e);
            }

            // If a dead object exception was thrown -- fall through to
            // restart the application.
            knownToBeDead = true;
        }

        r.notifyUnknownVisibilityLaunchedForKeyguardTransition();

        final boolean isTop = andResume && r.isTopRunningActivity();
        mService.startProcessAsync(r, knownToBeDead, isTop, isTop ? "top-activity" : "activity");
    }
  1. 这时窗口已经黑白屏,做个判断,要启动的ActivityRecord的进程已经存在直接启动act,否则启动进程,这里就当没有进程。

  1. ATMS 的startProcessAsync -》 AMS 的starProcess开始启动进程。

  1. 启动进程ProcessList (startProcess) -》Process(start)-> Zygote(start),这当中开启socket,准备新进程的参数,构建回调的返回类;打开一个流写入消息

  1. 此时在ZyGote(ZygoteServer)的进程里有个无限循环读取请求命令,满足条件后通过jni 调用fork一个新进程

  1. 此时通过反射拿到Application进程的类,找到main函数执行。

       // Remaining arguments are passed to the start class's static main
        return findStaticMain(args.startClass, args.startArgs, classLoader);
  1. 把app进程的binder对象给AMS ,attachApplicationLocked-》

// Make app active after binding application or client may be running requests (e.g

// starting activities) before it is ready.

app.makeActive(thread, mProcessStats);

  1. 调用ATMS 的 attachApplication 启动Activity

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值