App启动流程

App启动流程:相关问题整理

2019-04-21  本文已影响6人  sjandroid
问题1:App进程是如何获取system_server进程中提供的系统服务的?(ActivityManager.getService()是如何获取AMS在App进程的Binder代理的)?

1.Android需要使用Binder这种IPC方式来使用system_server进程中提供的那些系统服务
2.App进程启动完毕后,会执行ApplicationThread.bindApplication()。在该方法内部会执行ServiceManager.initServiceCache()用于缓存系统服务在App进程的 Binder本地代理对象。
3.通过ActivityManager.getService()会从ServiceManager的缓存池中获取AMS服务在App进程中的Binder代理对象。


问题2:为什么要把新创建的ActivityStack指向ASS中的mFocusedStack?

1:这是因为在后续调用“ActivityStack.resumeTopActivityInnerLocked()”时会先暂停“非焦点”Activity栈中保存的已经处于栈顶的Activity,然后再恢复处于焦点栈中待启动的Activity。
2:这里具体通过“ASS.isFocusedStack()”来判断“当前 Activity 栈是否是焦点栈”。而在该方法中就是判断相应栈是否是ASS.mFocusedStack指向的那个栈

源码

    boolean isFocusedStack(ActivityStack stack) {
        if (stack == null) {
            return false;
        }

        final ActivityRecord parent = stack.mActivityContainer.mParentActivity;
        if (parent != null) {
            stack = parent.getStack();
        }
        //判断是否是“mFocusedStack指向的栈”。
        return stack == mFocusedStack;
    }
上一篇下一篇

猜你喜欢

热点阅读