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

Android开机启动流程

Android开机启动流程

systemReady启动"added application"

@frameworks/base/services/java/com/android/server/SystemServer.java
mainnew SystemServer().run();startBootstrapServicesmActivityManagerService = ActivityManagerService.Lifecycle.startService(mSystemServiceManager, atm);mDisplayManagerService = mSystemServiceManager.startService(DisplayManagerService.class);mActivityManagerService.setSystemProcess();
@frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.javaServiceManager.addService(Context.ACTIVITY_SERVICEServiceManager.addService("meminfo", new MemBinder(this)ServiceManager.addService("gfxinfo", new GraphicsBinder(this))ApplicationInfo info = mContext.getPackageManager().getApplicationInfo( "android", STOCK_PM_FLAGS | MATCH_SYSTEM_ONLY);mSystemThread.installSystemApplicationInfo(info, getClass().getClassLoader());ProcessRecord app = mProcessList.newProcessRecordLocked(info, info.processName,   startOtherServices
@frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.javamActivityManagerService.systemReady(() -> {mLocalDeviceIdleController = LocalServices.getService(DeviceIdleInternal.class);
@frameworks/base/services/core/java/com/android/server/wm/ActivityTaskManagerService.javamActivityTaskManager.onSystemReady();
@frameworks/base/services/core/java/com/android/server/wm/ActivityTaskSupervisor.javamTaskSupervisor.onSystemReady();
@frameworks/base/services/core/java/com/android/server/wm/LaunchParamsPersister.javamLaunchParamsPersister.onSystemReady();PackageManagerInternal pmi = LocalServices.getService(PackageManagerInternal.class);mPackageList = pmi.getPackageList(new PackageListObserver());
@frameworks/base/services/core/java/com/android/server/am/UserController.javamUserController.onSystemReady();
@frameworks/base/services/core/java/com/android/server/appop/AppOpsService.javamAppOpsService.systemReady();mProcessList.onSystemReady();mAppExitInfoTracker.onSystemReady();ArrayList<ProcessRecord> procsToKill = null;  //杀应用名单for (int i=mPidsSelfLocked.size()-1; i>=0; i--) {ProcessRecord proc = mPidsSelfLocked.valueAt(i);procsToKill.add(proc);
@frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.javastartPersistentApps(PackageManager.MATCH_DIRECT_BOOT_AWARE);final List<ApplicationInfo> apps = AppGlobals.getPackageManager().getPersistentApplications(STOCK_PM_FLAGS | matchFlags).getList();addAppLocked(app, null, false, null ProcessRecord app;app = mProcessList.newProcessRecordLocked(info, customProcess, isolated, 0,mProcessList.startProcessLocked(app, new HostingRecord("added application", customProcess != null ? customProcess : app.processName),Start proc 1056:com.android.se/1068 for type:added application type end com.android.seStart proc 1078:com.android.phone/1001 for type:added application type end com.android.phoneStart proc 1079:com.android.systemui/u0a50 for type:added application type end com.android.systemui

Home应用程序

Android系统在启动时安装应用程序的过程,这些应用程序安装好之后,还需要有一个Home应用程序来负责把它们在桌面上展示出来,在Android系统中,这个默认的Home应用程序就是Launcher了.

@frameworks/base/services/core/java/com/android/server/am/UserController.java
finishUserUnlockingmHandler.obtainMessage(USER_UNLOCK_MSG, userId, 0, uss).sendToTarget();case USER_UNLOCK_MSG: finishUserUnlockedfinishUserUnlockedCompletedmHandler.obtainMessage(USER_UNLOCKED_MSG, userId, 0).sendToTarget();case USER_UNLOCKED_MSG: mInjector.getSystemServiceManager().onUserUnlocked(msg.arg1);mService.mTaskSupervisor.onUserUnlocked(user.getUserIdentifier());
@frameworks/base/services/core/java/com/android/server/wm/ActivityTaskSupervisor.javascheduleStartHome("userUnlocked");mHandler.obtainMessage(START_HOME_MSG, reason).sendToTarget();case START_HOME_MSG: { mRootWindowContainer.startHomeOnEmptyDisplays((String) msg.obj);    @frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.javastartHomeOnEmptyDisplaysforAllTaskDisplayAreas(taskDisplayArea -> {startHomeOnTaskDisplayArea(mCurrentUser, myReason, taskDisplayArea,        
@frameworks/base/services/core/java/com/android/server/wm/ActivityStartController.javaService.getActivityStartController().startHomeActivity(homeIntent, aInfo, myReason, taskDisplayArea);
@frameworks/base/services/core/java/com/android/server/wm/ActivityStarter.javamLastHomeActivityStartResult = obtainStarter(intent, "startHomeActivity: " + reason).setActivityOptions(options.toBundle()).execute();res = executeRequest(mRequest);ActivityRecord r = new ActivityRecord.Builder(mService)..setActivityInfo(aInfo)mLastStartActivityResult = startActivityUnchecked(r, sourceRecord, voiceSession,result = startActivityInner(r, sourceRecord, voiceSession, voiceInteractor,startFlags, doResume, options, inTask, inTaskFragment, restrictedBgActivity,mTargetRootTask.startActivityLocked(mStartActivity,
@frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.javamRootWindowContainer.resumeFocusedTasksTopActivities(mTargetRootTask, mStartActivity, mOptions, mTransientLaunch);final Task focusedRoot = display.getFocusedRootTask();
@frameworks/base/services/core/java/com/android/server/wm/Task.javafocusedRoot.resumeTopActivityUncheckedLocked(target, targetOptions);someActivityResumed = resumeTopActivityInnerLocked(prev, options, deferPause);
@frameworks/base/services/core/java/com/android/server/wm/TaskFragment.javaresumed[0] = topFragment.resumeTopActivity(prev, options, deferPause);ActivityRecord next = topRunningActivity(true /* focusableOnly */);pausing |= startPausing(mTaskSupervisor.mUserLeaving, false /* uiSleeping */, next, "resumeTopActivity");  //这里就是stop上一个activity的地方if (next.attachedToProcess()) {   //要启动的activity所在的进程已经起来了,直接通过事务的形式去启动activityfinal ClientTransaction transaction = ClientTransaction.obtain(next.app.getThread(), next.appToken);mAtmService.getLifecycleManager().scheduleTransaction(transaction);} else {   //如果进程没启动,调用ActivityTaskSupervisor的startSpecificActivity
@frameworks/base/services/core/java/com/android/server/wm/ActivityTaskSupervisor.javamTaskSupervisor.startSpecificActivity(next, true, true);
@base/services/core/java/com/android/server/wm/ActivityTaskManagerService.javamService.startProcessAsync(r, knownToBeDead, isTop, isTop ? "top-activity" : "activity");final Message m = PooledLambda.obtainMessage(ActivityManagerInternal::startProcess, mAmInternal, activity.processName,mH.sendMessage(m);LocalService::startProcess  //class LocalService extends ActivityManagerInternalstartProcessLocked(processName, info, knownToBeDead, 0 /* intentFlags */, new HostingRecord(hostingType, hostingName, isTop),
@frameworks/base/services/core/java/com/android/server/am/ProcessList.javareturn mProcessList.startProcessLocked(processName, info, knownToBeDead, intentFlags,startProcessLocked(app, hostingRecord, zygotePolicyFlags, abiOverride);startProcessLocked(app, hostingRecord, zygotePolicyFlags, falsestartProcessLocked(hostingRecord, entryPoint, app, uid, gids, runtimeFlags, zygotePolicyFlags, mountExternal, seInfo, requiredAbi,mService.mProcStartHandler.post(() -> handleProcessStart( app,handleProcessStartedLocked(app, startResult, startSeq);return handleProcessStartedLocked(pending, startResult.pid, startResult.usingWrapper,buf.append("Start proc ");  //Start proc 1486:com.dynabook.VDlauncher/1000 for top-activity {com.dynabook.VDlauncher/com.dynabook.VDlauncher.MainActivity}buf.append(pid);buf.append(':');buf.append(app.processName);buf.append('/');buf.append(app.getHostingRecord().getType());buf.append(app.getHostingRecord().getName());..............
@src/main/java/com/xxx/launcher/MainActivity.javaMainActivity::onCreate 

@frameworks/base/services/java/com/android/server/SystemServer.java
main
    new SystemServer().run();
        startBootstrapServices
            mActivityManagerService = ActivityManagerService.Lifecycle.startService(mSystemServiceManager, atm);
            mDisplayManagerService = mSystemServiceManager.startService(DisplayManagerService.class);
            mActivityManagerService.setSystemProcess();
@frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
                ServiceManager.addService(Context.ACTIVITY_SERVICE
                ServiceManager.addService("meminfo", new MemBinder(this)
                ServiceManager.addService("gfxinfo", new GraphicsBinder(this))
                ApplicationInfo info = mContext.getPackageManager().getApplicationInfo( "android", STOCK_PM_FLAGS | MATCH_SYSTEM_ONLY);
                mSystemThread.installSystemApplicationInfo(info, getClass().getClassLoader());
                ProcessRecord app = mProcessList.newProcessRecordLocked(info, info.processName,   
        startOtherServices
@frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
            mActivityManagerService.systemReady(() -> {
                mLocalDeviceIdleController = LocalServices.getService(DeviceIdleInternal.class);
@frameworks/base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
                mActivityTaskManager.onSystemReady();
@frameworks/base/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
                    mTaskSupervisor.onSystemReady();
@frameworks/base/services/core/java/com/android/server/wm/LaunchParamsPersister.java
                        mLaunchParamsPersister.onSystemReady();
                            PackageManagerInternal pmi = LocalServices.getService(PackageManagerInternal.class);
                            mPackageList = pmi.getPackageList(new PackageListObserver());
@frameworks/base/services/core/java/com/android/server/am/UserController.java
                mUserController.onSystemReady();
@frameworks/base/services/core/java/com/android/server/appop/AppOpsService.java
                mAppOpsService.systemReady();
                mProcessList.onSystemReady();
                    mAppExitInfoTracker.onSystemReady();
                ArrayList<ProcessRecord> procsToKill = null;  //杀应用名单
                for (int i=mPidsSelfLocked.size()-1; i>=0; i--) {
                    ProcessRecord proc = mPidsSelfLocked.valueAt(i);
                    procsToKill.add(proc);
@frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
                startPersistentApps(PackageManager.MATCH_DIRECT_BOOT_AWARE);
                    final List<ApplicationInfo> apps = AppGlobals.getPackageManager().getPersistentApplications(STOCK_PM_FLAGS | matchFlags).getList();
                    addAppLocked(app, null, false, null 
                        ProcessRecord app;
                        app = mProcessList.newProcessRecordLocked(info, customProcess, isolated, 0,
                        mProcessList.startProcessLocked(app, new HostingRecord("added application", customProcess != null ? customProcess : app.processName),
                            Start proc 1056:com.android.se/1068 for type:added application type end com.android.se
                            Start proc 1078:com.android.phone/1001 for type:added application type end com.android.phone
                            Start proc 1079:com.android.systemui/u0a50 for type:added application type end com.android.systemui
        
@frameworks/base/services/core/java/com/android/server/am/UserController.java
finishUserUnlocking
    mHandler.obtainMessage(USER_UNLOCK_MSG, userId, 0, uss).sendToTarget();
        case USER_UNLOCK_MSG: finishUserUnlocked
            finishUserUnlockedCompleted
                mHandler.obtainMessage(USER_UNLOCKED_MSG, userId, 0).sendToTarget();
                    case USER_UNLOCKED_MSG: mInjector.getSystemServiceManager().onUserUnlocked(msg.arg1);
                        mService.mTaskSupervisor.onUserUnlocked(user.getUserIdentifier());
@frameworks/base/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
                            scheduleStartHome("userUnlocked");
                                mHandler.obtainMessage(START_HOME_MSG, reason).sendToTarget();
                                    case START_HOME_MSG: { mRootWindowContainer.startHomeOnEmptyDisplays((String) msg.obj);    
                                    @frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.java
                                        startHomeOnEmptyDisplays
                                            forAllTaskDisplayAreas(taskDisplayArea -> {
                                                startHomeOnTaskDisplayArea(mCurrentUser, myReason, taskDisplayArea,        
@frameworks/base/services/core/java/com/android/server/wm/ActivityStartController.java
                                                    Service.getActivityStartController().startHomeActivity(homeIntent, aInfo, myReason, taskDisplayArea);
@frameworks/base/services/core/java/com/android/server/wm/ActivityStarter.java
                                                        mLastHomeActivityStartResult = obtainStarter(intent, "startHomeActivity: " + reason).setActivityOptions(options.toBundle()).execute();
                                                            res = executeRequest(mRequest);
                                                                ActivityRecord r = new ActivityRecord.Builder(mService)..setActivityInfo(aInfo)
                                                                mLastStartActivityResult = startActivityUnchecked(r, sourceRecord, voiceSession,
                                                                    result = startActivityInner(r, sourceRecord, voiceSession, voiceInteractor,startFlags, doResume, options, inTask, inTaskFragment, restrictedBgActivity,
                                                                        mTargetRootTask.startActivityLocked(mStartActivity,
@frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.java
                                                                        mRootWindowContainer.resumeFocusedTasksTopActivities(mTargetRootTask, mStartActivity, mOptions, mTransientLaunch);
                                                                            final Task focusedRoot = display.getFocusedRootTask();
@frameworks/base/services/core/java/com/android/server/wm/Task.java
                                                                            focusedRoot.resumeTopActivityUncheckedLocked(target, targetOptions);
                                                                                someActivityResumed = resumeTopActivityInnerLocked(prev, options, deferPause);
@frameworks/base/services/core/java/com/android/server/wm/TaskFragment.java
                                                                                    resumed[0] = topFragment.resumeTopActivity(prev, options, deferPause);
                                                                                        ActivityRecord next = topRunningActivity(true /* focusableOnly */);
                                                                                        pausing |= startPausing(mTaskSupervisor.mUserLeaving, false /* uiSleeping */, next, "resumeTopActivity");  //这里就是stop上一个activity的地方
                                                                                        if (next.attachedToProcess()) {   //要启动的activity所在的进程已经起来了,直接通过事务的形式去启动activity
                                                                                            final ClientTransaction transaction = ClientTransaction.obtain(next.app.getThread(), next.appToken);
                                                                                            mAtmService.getLifecycleManager().scheduleTransaction(transaction);
                                                                                        } else {   //如果进程没启动,调用ActivityTaskSupervisor的startSpecificActivity
@frameworks/base/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
                                                                                            mTaskSupervisor.startSpecificActivity(next, true, true);
@base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
                                                                                                mService.startProcessAsync(r, knownToBeDead, isTop, isTop ? "top-activity" : "activity");
                                                                                                    final Message m = PooledLambda.obtainMessage(ActivityManagerInternal::startProcess, mAmInternal, activity.processName,
                                                                                                    mH.sendMessage(m);
                                                                                                        LocalService::startProcess  //class LocalService extends ActivityManagerInternal
                                                                                                            startProcessLocked(processName, info, knownToBeDead, 0 /* intentFlags */, new HostingRecord(hostingType, hostingName, isTop),
@frameworks/base/services/core/java/com/android/server/am/ProcessList.java
                                                                                                                return mProcessList.startProcessLocked(processName, info, knownToBeDead, intentFlags,
                                                                                                                    startProcessLocked(app, hostingRecord, zygotePolicyFlags, abiOverride);
                                                                                                                        startProcessLocked(app, hostingRecord, zygotePolicyFlags, false
                                                                                                                            startProcessLocked(hostingRecord, entryPoint, app, uid, gids, runtimeFlags, zygotePolicyFlags, mountExternal, seInfo, requiredAbi,
                                                                                                                                mService.mProcStartHandler.post(() -> handleProcessStart( app,
                                                                                                                                    handleProcessStartedLocked(app, startResult, startSeq);
                                                                                                                                        return handleProcessStartedLocked(pending, startResult.pid, startResult.usingWrapper,
                                                                                                                                            buf.append("Start proc ");  //Start proc 1486:com.dynabook.VDlauncher/1000 for top-activity {com.dynabook.VDlauncher/com.dynabook.VDlauncher.MainActivity}
                                                                                                                                            buf.append(pid);
                                                                                                                                            buf.append(':');
                                                                                                                                            buf.append(app.processName);
                                                                                                                                            buf.append('/');
                                                                                                                                            buf.append(app.getHostingRecord().getType());
                                                                                                                                            buf.append(app.getHostingRecord().getName());
                                                                                                                                            
                                                                                                                                            ..............
@src/main/java/com/xxx/launcher/MainActivity.java
                                                                                                                                                MainActivity::onCreate 

http://www.lryc.cn/news/433857.html

相关文章:

  • 数据结构基本知识
  • 浙大数据结构:02-线性结构4 Pop Sequence
  • java开发,记录一些注解和架构 pojo、entity、respository
  • MatLab基础学习01
  • 第 5 章多视图几何
  • IOS 开发者账号注册流程
  • netty之NioEventLoop和NioEventLoopGroup
  • 睿考网:中级经济师考试题型有哪些?
  • kubernetes集群部署Confluence 7.2.0+mysql 5.7(自测有效)
  • Vmware ubuntu22.04 虚拟机 连接Windows主机虚拟串口
  • Postgresql碎片整理
  • 【最新华为OD机试E卷-支持在线评测】字母组合(200分)多语言题解-(Python/C/JavaScript/Java/Cpp)
  • 力扣493.翻转对
  • 潜望长焦+快充:vivo X200系列,小尺寸手机的大突破
  • Stable Diffusion训练LoRA模型参数详细说明(阿里巴巴堆友AI)
  • Learn ComputeShader 12 Setting up a buffer-based particle effect
  • 【STL中容器汇总】map、list、vector等详解
  • Semantic Kernel + Natasha:一小时快速生成100个API的奇迹
  • rancher upgrade 【rancher 升级】
  • 【Linux】多线程:线程互斥、互斥锁、线程安全
  • 进程之间的通信方式
  • 动手学深度学习(pytorch)学习记录26-卷积神经网路(LeNet)[学习记录]
  • log4j 和 java.lang.OutOfMemoryError PermGen space
  • 2024.9.9营养小题【2】
  • uniapp的barcode组件去掉自动放大功能
  • H5接入Steam 获取用户数据案例
  • 《A Few Useful Things to Know about Machine Learning》论文导读
  • 隔壁老樊2024全国巡回演唱会重磅来袭,首站广州正式官宣!
  • 【C++】list(下)
  • 千云物流 -低代码平台MySQL备份数据