API 33
A进程的Activity起点B进程的BActivity
- ProcessA: startActivity
- ProcessA: android.app.ContextImpl#startActivity()
- ProcessA: mMainThread.getInstrumentation().execStartActivity
- ProcessA: android.app.Instrumentation#execStartActivity()
- ProcessA: ActivityTaskManager.getService().startActivity
- SystemServer: com.android.server.wm.ActivityTaskManagerService#startActivity
- SystemServer: com.android.server.wm.ActivityTaskManagerService#startActivityAsUser()
- SystemServer: getActivityStartController().obtainStarter().execute
- SystemServer: ActivityStarter.execute
- SystemServer: com.android.server.wm.ActivityStarter#executeRequest
- SystemServer: com.android.server.wm.ActivityStarter#startActivityUnchecked
- SystemServer: com.android.server.wm.ActivityStarter#startActivityInner
- SystemServer: com.android.server.wm.RootWindowContainer#resumeFocusedTasksTopActivities()
- SystemServer: com.android.server.wm.Task#resumeTopActivityUncheckedLocked()
- SystemServer: com.android.server.wm.Task#resumeTopActivityInnerLocked
- SystemServer: com.android.server.wm.TaskFragment#resumeTopActivity
- SystemServer: pausing |= startPausing() 开始执行Aactivity的onPause
- SystemServer: com.android.server.wm.TaskFragment#startPausing()
- SystemServer: com.android.server.wm.TaskFragment#schedulePauseActivity
- SystemServer: mAtmService.getLifecycleManager().scheduleTransaction调用到
- SystemServer: com.android.server.wm.ClientLifecycleManager#scheduleTransaction(ClientTransaction)
- SystemServer: ClientTransaction.schedule();
- SystemServer: mClient.scheduleTransaction(this) mClient为IApplicationThread。即A进程的ibinder
- Process A:ActivityThread.this.scheduleTransaction
- Process A:ActivityThread的父类 android.app.ClientTransactionHandler#scheduleTransaction
- Process A:mTransactionExecutor.execute(transaction);最终调用到对应XXXActivityItem的execute方法
- Process A: android.app.servertransaction.PauseActivityItem#execute
- Process A:android.app.ActivityThread#handlePauseActivity
- Process A:android.app.ActivityThread#performPauseActivity()
- Process A:android.app.ActivityThread#performPauseActivityIfNeeded
- Process A:mInstrumentation.callActivityOnPause
- Process A:android.app.Activity#performPause
- Process A:android.app.Activity.onPause !!!
- SystemServer: pausing |= startPausing() 开始执行Aactivity的onPause
- SystemServer: mAtmService.startProcessAsync(APP不存在执行创建进程)
- SystemServer: com.android.server.wm.ActivityTaskManagerService#startProcessAsync
- SystemServer: ActivityManagerInternal::startProcess
- SystemServer: AMS.LocalService.startProcess
- SystemServer: com.android.server.am.ActivityManagerService#startProcessLocked
- SystemServer: com.android.server.am.ProcessList#startProcessLocked()
- SystemServer: Process.ProcessStartResult startResult = startProcess
- SystemServer: com.android.server.am.ProcessList#startProcess
- SystemServer: startResult = Process.start
- SystemServer: android.os.Process#start
- SystemServer: ZYGOTE_PROCESS.start
- SystemServer: android.os.ZygoteProcess#start
- SystemServer: startViaZygote
- SystemServer: android.os.ZygoteProcess#startViaZygote
- SystemServer: android.os.ZygoteProcess#zygoteSendArgsAndGetResult
- SystemServer: android.os.ZygoteProcess#attemptUsapSendArgsAndGetResult
- SystemServer: usapWriter.flush();//发送消息到zygote进程的socket中
- Zygote: ZygoteInit中一直有个zygoteServer.runSelectLoop在循环等待消息!
- Zygote: com.android.internal.os.ZygoteServer#runSelectLoop
- Zygote: pollReturnValue = Os.poll(pollFDs, pollTimeoutMs);之前一直阻塞,此时有消息了。往下执行
- Zygote: ZygoteConnection connection = peers.get(pollIndex);//pollIndex>0,则代表通过socket接收来自对端的数据,并执行相应操作
- Zygote: final Runnable command = connection.processOneCommand(this);// !!!进行进程的处理:创建进程
- Zygote: com.android.internal.os.ZygoteConnection#processCommand
- Zygote: Zygote.forkAndSpecialize
- Zygote: com.android.internal.os.Zygote#forkAndSpecialize
- Zygote: nativeForkAndSpecialize//native去fork子进程
- Zygote: com_android_internal_os_Zygote_nativeForkAndSpecialize > com_android_internal_os_Zygote.cpp
- Zygote: pid_t pid = ForkCommon(env, false, fds_to_close, fds_to_ignore, true);//真正fork
- ProcessB: if (pid == 0) handleChildProc
- ProcessB: com.android.internal.os.ZygoteInit.java #zygoteInit
- ProcessB: AndroidRuntime.cpp com.android.internal.os.ZygoteInit#nativeZygoteInit
- ProcessB: gCurRuntime->onZygoteInit();>AndroidRuntime.cpp
- ProcessB: onZygoteInit>app_main.cpp
- ProcessB: ProcessState::self openBinder。初始化新进程的binder
- ProcessB: com.android.internal.os.RuntimeInit#applicationInit
- ProcessB: 通过findStaticMain返回一个封装了ActivityThread.main方法的runnable
- ProcessB: com.android.internal.os.ZygoteInit#main > caller.run();执行runnable
- ProcessB: 进入到activityThread.main
- ProcessB: thread.attach(false, startSeq);
- ProcessB: mgr.attachApplication(mAppThread, startSeq);//把应用的binder 传给ams
- SystemServer: com.android.server.am.ActivityManagerService#attachApplicationLocked
- //mProcessesReady这个变量在AMS的 systemReady 中被赋值为true,所以这里的normalMode也为true
boolean normalMode = mProcessesReady || isAllowedWhileBooting(app.info); - SystemServer: thread.bindApplication
- ProcessB: ActivityThread.bindApplication>sendMsg
- ProcessB: ActivityThread.handleBindApplication
- ProcessB: Application app = data.info.makeApplicationInner(data.restrictedBackupMode, null);
- ProcessB: android.app.LoadedApk#makeApplicationInner()
- ProcessB: //通过反射创建application,此处第二个参数为null,表示instrumentation为null。
- ProcessB: android.app.Instrumentation.newApplication()//pathclassloader问题
- ProcessB: android.app.Application#attach
- ProcessB: android.content.ContextWrapper.attachBaseContext//app第一个生命周期
- ProcessB: mLoadedApk = ContextImpl.getImpl(context).mPackageInfo;//设置mLoadApk
- ProcessB: if (instrumentation != null) {instrumentation.callApplicationOnCreate(app);}
- ProcessB: // 所以这里不会执行。oncreate方法在ActivityThread里面调用
- ProcessB: android.app.Instrumentation.newApplication()//pathclassloader问题
- ProcessB: installContentProviders(app, data.providers);//初始化provider
- ProcessB: mInstrumentation.onCreate(data.instrumentationArgs);//调用onCeate生命周期。//app第二个生命周期
- ProcessB: //所以provider的oncreate在application的oncreate之前
- SystemServer: app.makeActive(thread, mProcessStats);//把ProcessB的binder即applicationThread保存下来
- SystemServer: updateLruProcessLocked(app, false, null);//把ProcessB的ibinder保存到ProcessList中
- SystemServer: //ams 里有个变量 processList里有个变量变量ArrayList(ams就间接持有了process的binder)
- SystemServer: //上面说到,这里normalMode为true,去真正启动Activity
- SystemServer: didSomething = mAtmInternal.attachApplication(app.getWindowProcessController());
- SystemServer: 调用到com.android.server.wm.ActivityTaskManagerService.LocalService#attachApplication
- SystemServer: mRootWindowContainer.attachApplication(wpc)
- SystemServer: mAttachApplicationHelper.process(app);
- SystemServer: com.android.server.wm.RootWindowContainer#ensureActivitiesVisible()
- SystemServer: com.android.server.wm.RootWindowContainer#ensureActivitiesVisible()
- SystemServer: com.android.server.wm.DisplayContent#ensureActivitiesVisible
- SystemServer: rootTask.ensureActivitiesVisible(starting, configChanges, preserveWindows, notifyClients);
- SystemServer: com.android.server.wm.Task#ensureActivitiesVisible()
- SystemServer: task.updateActivityVisibilities(starting, configChanges, preserveWindows, notifyClients);
- SystemServer: com.android.server.wm.TaskFragment#updateActivityVisibilities
- SystemServer: mEnsureActivitiesVisibleHelper.process(starting, configChanges, preserveWindows, notifyClients);
- SystemServer: com.android.server.wm.EnsureActivitiesVisibleHelper#process
- SystemServer: setActivityVisibilityState(child.asActivityRecord(), starting, resumeTopActivity);
- SystemServer: makeVisibleAndRestartIfNeeded(mStarting, mConfigChanges, isTop, resumeTopActivity && isTop, r);
- SystemServer: mTaskFragment.mTaskSupervisor.startSpecificActivity(r, andResume, true /* checkConfig */)//重要函数
- SystemServer: com.android.server.wm.ActivityTaskSupervisor#startSpecificActivity
- SystemServer: com.android.server.wm.ActivityTaskSupervisor#realStartActivityLocked
- SystemServer: clientTransaction.addCallback(LaunchActivityItem.obtain())//这里是LaunchActivityItem!!
- SystemServer: mService.getLifecycleManager().scheduleTransaction(clientTransaction);
- SystemServer: transaction.schedule();
- SystemServer: android.app.servertransaction.ClientTransaction#schedule > mClient.scheduleTransaction(this);
- ProcessB: android.app.ActivityThread.ApplicationThread#scheduleTransaction
- ProcessB: ActivityThread.this.scheduleTransaction(transaction);
- ProcessB: ActivityThread的父类android.app.ClientTransactionHandler执行scheduleTransaction
- ProcessB: mTransactionExecutor.execute(transaction);
- ProcessB: android.app.servertransaction.TransactionExecutor#execute
- ProcessB: executeCallbacks(transaction);
- ProcessB: final List callbacks = transaction.getCallbacks();
- ProcessB: final ClientTransactionItem item = callbacks.get(i);
- ProcessB: item.execute(mTransactionHandler, token, mPendingActions);
- ProcessB: item为LaunchActivityItem 所以!!执行
- ProcessB: android.app.servertransaction.LaunchActivityItem#execute
- ProcessB: client.handleLaunchActivity(r, pendingActions, null /* customIntent */);
- ProcessB: android.app.ActivityThread#handleLaunchActivity
- ProcessB: android.app.ActivityThread#performLaunchActivity
- ProcessB: mInstrumentation.callActivityOnCreate
- ProcessB: activity.performCreate(icicle, persistentState);
- ProcessB: android.app.Activity#performCreate()
- ProcessB: onCreate(icicle);//执行ProcessB Activity的第一个生命周期
- //mProcessesReady这个变量在AMS的 systemReady 中被赋值为true,所以这里的normalMode也为true