当前位置: 首页 > news >正文

Android 11开机流程记录

简单记录下系统开机流程,方便后面有问题时可以帮助分析

system/core/init/main.cpp 
    int main(int argc, char** argv)
        return SecondStageMain(argc, argv);

system/core/init/init.cpp 
    int SecondStageMain(int argc, char** argv)
        static void LoadBootScripts(ActionManager& action_manager, ServiceList& service_list)
            parser.ParseConfig("/system/etc/init/hw/init.rc");

system/core/rootdir/init.rc
    import /system/etc/init/hw/init.${ro.zygote}.rc

system/core/rootdir/init.zygote64.rc
    service zygote /system/bin/app_process64 -Xzygote /system/bin --zygote --start-system-server

frameworks/base/cmds/app_process/app_main.cpp
    int main(int argc, char* const argv[])
        args.add(String8("start-system-server"));
        runtime.start("com.android.internal.os.ZygoteInit", args, zygote);

frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
    public static void main(String argv[])
        Runnable r = forkSystemServer(abiList, zygoteSocketName, zygoteServer);
            String args[] = { "--setuid=1000", "--setgid=1000", "--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1018,1021,1023," + "1024,1032,1065,3001,3002,3003,3006,3007,3009,3010,3011", "--capabilities=" + capabilities + "," + capabilities, "--nice-name=system_server", "--runtime-args", "--target-sdk-version=" + VMRuntime.SDK_VERSION_CUR_DEVELOPMENT, "com.android.server.SystemServer", };
            parsedArgs = new ZygoteArguments(args);
                return handleSystemServerProcess(parsedArgs);
                    return ZygoteInit.zygoteInit(parsedArgs.mTargetSdkVersion, parsedArgs.mDisabledCompatChanges, parsedArgs.mRemainingArgs, cl);
                        return RuntimeInit.applicationInit(targetSdkVersion, disabledCompatChanges, argv, classLoader);

frameworks/base/core/java/com/android/internal/os/RuntimeInit.java
    protected static Runnable applicationInit(int targetSdkVersion, long[] disabledCompatChanges, String[] argv, ClassLoader classLoader)
        return findStaticMain(args.startClass, args.startArgs, classLoader)
            cl = Class.forName(className, true, classLoader);
             m = cl.getMethod("main", new Class[] { String[].class });
             return new MethodAndArgsCaller(m, argv);

frameworks/base/core/java/com/android/internal/os/RuntimeInit.java: static class MethodAndArgsCaller implements Runnable
    mMethod.invoke(null, new Object[] { mArgs });

frameworks/base/services/java/com/android/server/SystemServer.java
    public static void main(String[] args)
        new SystemServer().run()
            startBootstrapServices(t);
            startCoreServices(t);
            startOtherServices(t);
                mActivityManagerService = ActivityManagerService.Lifecycle.startService( mSystemServiceManager, atm);
                mActivityManagerService.systemReady

frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
    public void systemReady(final Runnable goingCallback, @NonNull TimingsTraceAndSlog t)
        mAtmInternal.startHomeOnAllDisplays(currentUserId, "systemReady");

frameworks/base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
    public boolean startHomeOnAllDisplays(int userId, String reason)
        return mRootWindowContainer.startHomeOnAllDisplays(userId, reason);

frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.java
    boolean startHomeOnAllDisplays(int userId, String reason)
        homeStarted |= startHomeOnDisplay(userId, reason, displayId);
            return startHomeOnDisplay(userId, reason, displayId, false /* allowInstrumenting */, false /* fromHomeKey */);
                result |= startHomeOnTaskDisplayArea(userId, reason, taskDisplayArea, allowInstrumenting, fromHomeKey);
                    mService.getActivityStartController().startHomeActivity(homeIntent, aInfo, myReason, taskDisplayArea);

frameworks/base/services/core/java/com/android/server/wm/ActivityStartController.java
    void startHomeActivity(Intent intent, ActivityInfo aInfo, String reason, TaskDisplayArea taskDisplayArea)
        mLastHomeActivityStartResult = obtainStarter(intent, "startHomeActivity: " + reason) .setOutActivity(tmpOutRecord) .setCallingUid(0) .setActivityInfo(aInfo) .setActivityOptions(options.toBundle()) .execute();
            ActivityStarter obtainStarter(Intent intent, String reason)
                return mFactory.obtain().setIntent(intent).setReason(reason);

frameworks/base/services/core/java/com/android/server/wm/ActivityStarter.java
    int execute()
        res = executeRequest(mRequest);
            mLastStartActivityResult = startActivityUnchecked(r, sourceRecord, voiceSession, request.voiceInteractor, startFlags, true /* doResume */, checkedOptions, inTask, restrictedBgActivity, intentGrants);
                result = startActivityInner(r, sourceRecord, voiceSession, voiceInteractor, startFlags, doResume, options, inTask, restrictedBgActivity, intentGrants);
                    mRootWindowContainer.resumeFocusedStacksTopActivities( mTargetStack, mStartActivity, mOptions);

frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.java 
    boolean resumeFocusedStacksTopActivities( ActivityStack targetStack, ActivityRecord target, ActivityOptions targetOptions)
        result = targetStack.resumeTopActivityUncheckedLocked(target, targetOptions);

frameworks/base/services/core/java/com/android/server/wm/ActivityStack.java
        boolean resumeTopActivityUncheckedLocked(ActivityRecord prev, ActivityOptions options)
            result = resumeTopActivityInnerLocked(prev, options);
                pausing |= startPausingLocked(userLeaving, false /* uiSleeping */, next);
                    mAtmService.getLifecycleManager().scheduleTransaction(prev.app.getThread(), prev.appToken, PauseActivityItem.obtain(prev.finishing, userLeaving, prev.configChangeFlags, pauseImmediately));

frameworks/base/core/java/android/app/ClientTransactionHandler.java
        void scheduleTransaction(ClientTransaction transaction)
             sendMessage(ActivityThread.H.EXECUTE_TRANSACTION, transaction);

frameworks/base/core/java/android/app/ActivityThread.java
    void sendMessage(int what, Object obj)
        sendMessage(what, obj, 0, 0, false);
             mH.sendMessage(msg);

    case EXECUTE_TRANSACTION:
        mTransactionExecutor.execute(transaction);

frameworks/base/core/java/android/app/servertransaction/TransactionExecutor.java
    public void execute(ClientTransaction transaction)
        executeCallbacks(transaction);
            cycleToPath(r, postExecutionState, shouldExcludeLastTransition, transaction);
                performLifecycleSequence(r, path, transaction);
                    mTransactionHandler.handleLaunchActivity(r, mPendingActions, null /* customIntent */);

frameworks/base/core/java/android/app/ActivityThread.java
        public Activity handleLaunchActivity(ActivityClientRecord r, PendingTransactionActions pendingActions, Intent customIntent)
            final Activity a = performLaunchActivity(r, customIntent);
                mInstrumentation.callActivityOnCreate(activity, r.state);

frameworks/base/core/java/android/app/Instrumentation.java
    public void callActivityOnCreate(Activity activity, Bundle icicle)
        activity.performCreate(icicle);

frameworks/base/core/java/android/app/Activity.java
    final void performCreate(Bundle icicle)
        onCreate(icicle);

相关文章:

  • 系统安全之身份认证
  • MySQL 8.0的数据库root用户默认无法远程登录,需要修改root的远程授权
  • 换颜色 算法笔记
  • uni-app隐藏返回按钮
  • 【自建grafana接入阿里云sls】
  • JAVA_学习(IDEA
  • 阿里云实践创建实例步骤
  • 云安全【阿里云ECS攻防】
  • leetcode0721. 账户合并-medium
  • Pyenv——使用
  • Java学习笔记之:初识nginx
  • oracle表数据误删除恢复(闪回操作)
  • react中hook和高阶组件的选型
  • flutter把 pubspec.yaml 中的name改成了新的值
  • Elasticsearch的数据同步
  • 使用 React+Vite+Electron 搭建桌面应用
  • Mac中安装Anaconda、Anaconda基础命令、Pycharm结合Anaconda,看这一篇就够啦!
  • oracle 表空间超过最大限度,清理数据释放内存
  • Pycharm常用命令
  • js实现输入高亮@和#后面的内容
  • 淄博学校网站建设报价/seo网站优化培训找哪些
  • 绵阳城乡住房建设厅网站/搜索词
  • 提供常州微信网站建设/网站推广该怎么做
  • 天津网站制作福州/电子报刊的传播媒体是什么
  • 手机网站怎么在电脑上打开/优化关键词排名提升
  • 可以看的网站的浏览器有哪些/搜狗广告联盟