8.1 平台Activity启动流程
该堆栈分为两部分:
(1) launcher 点击启动App
(2) App中启动其他Activity
第一部分: Launcer 启动Activity
1.1 执行顺序 Activity.startActivityForResult() -- > Instrumentation.execStartActivity() -- > ActivityManagerSerivce$startActivity()
通过Activity启动,最后通过Binder方式远程调用ActivityManagerService的startActivity()函数
01-02 07:58:32.883 1528 1528 D hhh : Instrumentation$execStartActivity(), next step: Binder ActivityManagerSerivce$startActivity()
01-02 07:58:32.883 1528 1528 D hhh : java.lang.Exception
01-02 07:58:32.883 1528 1528 D hhh : at android.app.Instrumentation.execStartActivity(Instrumentation.java:1645)
01-02 07:58:32.883 1528 1528 D hhh : at android.app.Activity.startActivityForResult(Activity.java:4488)
01-02 07:58:32.883 1528 1528 D hhh : at com.android.launcher3.Launcher.startActivityForResult(Launcher.java:1919)
01-02 07:58:32.883 1528 1528 D hhh : at android.app.Activity.startActivity(Activity.java:4803)
01-02 07:58:32.883 1528 1528 D hhh : at com.android.launcher3.Launcher.startActivitySafely(Launcher.java:2736)
01-02 07:58:32.883 1528 1528 D hhh : at com.android.launcher3.Launcher.startAppShortcutOrInfoActivity(Launcher.java:2495)
01-02 07:58:32.883 1528 1528 D hhh : at com.android.launcher3.Launcher.onClickAppShortcut(Launcher.java:2480)
01-02 07:58:32.883 1528 1528 D hhh : at com.android.launcher3.Launcher.onClick(Launcher.java:2318)
01-02 07:58:32.883 1528 1528 D hhh : at android.view.View.performClick(View.java:6306)
01-02 07:58:32.883 1528 1528 D hhh : at android.view.View$PerformClick.run(View.java:24806)
01-02 07:58:32.883 1528 1528 D hhh : at android.os.Handler.handleCallback(Handler.java:790)
01-02 07:58:32.883 1528 1528 D hhh : at android.os.Handler.dispatchMessage(Handler.java:99)
01-02 07:58:32.883 1528 1528 D hhh : at android.os.Looper.loop(Looper.java:164)
01-02 07:58:32.883 1528 1528 D hhh : at android.app.ActivityThread.main(ActivityThread.java:6719)
01-02 07:58:32.883 1528 1528 D hhh : at java.lang.reflect.Method.invoke(Native Method)
01-02 07:58:32.883 1528 1528 D hhh : at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:449)
01-02 07:58:32.883 1528 1528 D hhh : at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
1.2 执行顺序 ActivityManagerSerivce$startActivity() -- > ActivityManagerService.startActivityAsUser() -- >
ActivityStarter.startActivityMayWait() -- >
ActivityStarter.startActivityLocked() -- >
ActivityStarter.startActivity(parm1) -- >
ActivityStarter.startActivity(parm2) -- >
ActivityStarter.startActivityUnchecked();
该方法将顺序调用两处:mTargetStack.startActivityLocked()和 mSupervisor.resumeFocusedStackTopActivityLocked()
1.2.1 顺序调用ActivityStarter.startActivityUnchecked() -- > mTargetStack.startActivityLocked()的堆栈
01-02 07:58:32.919 487 1039 D hhh : ActivityStarter$startActivity() ...
01-02 07:58:32.929 487 1039 D hhh : ActivityStarter$startActivity() -- > doPendingActivityLaunchesLocked(false)
01-02 07:58:32.930 487 1039 D hhh : ActivityStarter$startActivityUnchecked() start ...
01-02 07:58:32.945 487 1039 D hhh : ActivityStarter$startActivityUnchecked() , mTargetStack.startActivityLocked ...
01-02 07:58:32.945 487 1039 D hhh : ActivityStack$startActivityLocked() start ...
01-02 07:58:32.945 487 1039 D hhh : java.lang.Exception
01-02 07:58:32.945 487 1039 D hhh : at com.android.server.am.ActivityStack.startActivityLocked(ActivityStack.java:2890)
01-02 07:58:32.945 487 1039 D hhh : at com.android.server.am.ActivityStarter.startActivityUnchecked(ActivityStarter.java:1287)
01-02 07:58:32.945 487 1039 D hhh : at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:1061)
01-02 07:58:32.945 487 1039 D hhh : at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:614)
01-02 07:58:32.945 487 1039 D hhh : at com.android.server.am.ActivityStarter.startActivityLocked(ActivityStarter.java:292)
01-02 07:58:32.945 487 1039 D hhh : at com.android.server.am.ActivityStarter.startActivityMayWait(ActivityStarter.java:868)
01-02 07:58:32.945 487 1039 D hhh : at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:4576)
01-02 07:58:32.945 487 1039 D hhh : at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:4540)
01-02 07:58:32.945 487 1039 D hhh : at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:121)
01-02 07:58:32.945 487 1039 D hhh : at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2934)
01-02 07:58:32.945 487 1039 D hhh : at android.os.Binder.execTransact(Binder.java:723)
1.2.2 顺序调用ActivityStarter.startActivityUnchecked() -- >
mSupervisor.resumeFocusedStackTopActivityLocked的堆栈 -- >
ActivityStack.resumeTopActivityUncheckedLocked() -- >
ActivityStack.resumeTopActivityInnerLocked() -- >
ActivityStackSupervisor.pauseBackStacks() -- >
ActivityStack.startPausingLocked() -- >
01-02 07:58:32.955 487 1039 D hhh : ActivityStarter$startActivityUnchecked() , mSupervisor.resumeFocusedStackTopActivityLocked ...
01-02 07:58:32.957 487 1039 D hhh : ActivityStack$startPausingLocked() start ...
01-02 07:58:32.957 487 1039 D hhh : java.lang.Exception
01-02 07:58:32.957 487 1039 D hhh : at com.android.server.am.ActivityStack.startPausingLocked(ActivityStack.java:1303)
01-02 07:58:32.957 487 1039 D hhh : at com.android.server.am.ActivityStackSupervisor.pauseBackStacks(ActivityStackSupervisor.java:1077)
01-02 07:58:32.957 487 1039 D hhh : at com.android.server.am.ActivityStack.resumeTopActivityInnerLocked(ActivityStack.java:2428)
01-02 07:58:32.957 487 1039 D hhh : at com.android.server.am.ActivityStack.resumeTopActivityUncheckedLocked(ActivityStack.java:2272)
01-02 07:58:32.957 487 1039 D hhh : at com.android.server.am.ActivityStackSupervisor.resumeFocusedStackTopActivityLocked(ActivityStackSupervisor.java:2112)
01-02 07:58:32.957 487 1039 D hhh : at com.android.server.am.ActivityStarter.startActivityUnchecked(ActivityStarter.java:1315)
01-02 07:58:32.957 487 1039 D hhh : at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:1061)
01-02 07:58:32.957 487 1039 D hhh : at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:614)
01-02 07:58:32.957 487 1039 D hhh : at com.android.server.am.ActivityStarter.startActivityLocked(ActivityStarter.java:292)
01-02 07:58:32.957 487 1039 D hhh : at com.android.server.am.ActivityStarter.startActivityMayWait(ActivityStarter.java:868)
01-02 07:58:32.957 487 1039 D hhh : at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:4576)
01-02 07:58:32.957 487 1039 D hhh : at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:4540)
01-02 07:58:32.957 487 1039 D hhh : at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:121)
01-02 07:58:32.957 487 1039 D hhh : at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2934)
01-02 07:58:32.957 487 1039 D hhh : at android.os.Binder.execTransact(Binder.java:723)
1.3 执行顺序 ActivityStack.startPausingLocked() -- > Binder 方式远程调用 ActivityThread$schedulePauseActivity() -- >Handler sendMessage -- > handlePauseActivity()
01-02 07:58:32.959 487 1039 D hhh : ActivityStack$startPausingLocked() ,Binder next step: prev.app.thread.schedulePauseActivity
01-02 07:58:32.960 1528 1553 D hhh : ActivityThread$schedulePauseActivity() sendMessage :PAUSE_ACTIVITY or PAUSE_ACTIVITY_FINISHING
// 执行原Activity的onPause
01-02 07:58:32.999 1528 1528 D hhh : ActivityThread$handlePauseActivity() , performPauseActivity ...
// Binder方式远程调用 ActivityManagerService$activityPaused(token),堆栈如下面
01-02 07:58:33.034 1528 1528 D hhh : ActivityThread$handlePauseActivity() , Binder ActivityManagerService$activityPaused(token)
01-02 07:58:33.047 487 962 D hhh : ActivityStack$activityPausedLocked() start ...
01-02 07:58:33.047 487 962 D hhh : ActivityStack$completePauseLocked() start ...
01-02 07:58:33.048 487 962 D hhh : ActivityStack$completePauseLocked(), next step: mStackSupervisor.resumeFocusedStackTopActivityLocked(topStack, prev, null)
// 堆栈:
ActivityManagerService.activityPaused() -- >
ActivityStack.activityPausedLocked() -- >
ActivityStack.completePauseLocked()
该方法将执行两部分:ActivityStackSupervisor.resumeFocusedStackTopActivityLocked() 和 ActivityStackSupervisor.ensureActivitiesVisibleLocked()
1.3.1 顺序执行1 ActivityStack.completePauseLocked() -- >
ActivityStackSupervisor.resumeFocusedStackTopActivityLocked() -- >
ActivityStack.resumeTopActivityUncheckedLocked() -- >
ActivityStack.resumeTopActivityInnerLocked() -- >
ActivityStackSupervisor.startSpecificActivityLocked() -- >
将会 ActivityManagerService mService.startProcessLocked() 去fork子进程;
01-02 07:58:33.059 487 962 D hhh : ActivityStackSupervisor$startSpecificActivityLocked() , next step: mService.startProcessLocked fork child process ...
01-02 07:58:33.059 487 962 D hhh : java.lang.Exception
01-02 07:58:33.059 487 962 D hhh : at com.android.server.am.ActivityStackSupervisor.startSpecificActivityLocked(ActivityStackSupervisor.java:1608)
01-02 07:58:33.059 487 962 D hhh : at com.android.server.am.ActivityStack.resumeTopActivityInnerLocked(ActivityStack.java:2743)
01-02 07:58:33.059 487 962 D hhh : at com.android.server.am.ActivityStack.resumeTopActivityUncheckedLocked(ActivityStack.java:2272)
01-02 07:58:33.059 487 962 D hhh : at com.android.server.am.ActivityStackSupervisor.resumeFocusedStackTopActivityLocked(ActivityStackSupervisor.java:2112)
01-02 07:58:33.059 487 962 D hhh : at com.android.server.am.ActivityStack.completePauseLocked(ActivityStack.java:1499)
01-02 07:58:33.059 487 962 D hhh : at com.android.server.am.ActivityStack.activityPausedLocked(ActivityStack.java:1419)
01-02 07:58:33.059 487 962 D hhh : at com.android.server.am.ActivityManagerService.activityPaused(ActivityManagerService.java:7520)
01-02 07:58:33.059 487 962 D hhh : at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:317)
01-02 07:58:33.059 487 962 D hhh : at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2934)
01-02 07:58:33.059 487 962 D hhh : at android.os.Binder.execTransact(Binder.java:723)
1.3.2 顺序执行2 ActivityStack.completePauseLocked() -- >
ActivityStackSupervisor.ensureActivitiesVisibleLocked() -- >
ActivityStack.ensureActivitiesVisibleLocked() -- >
ActivityStack.makeVisibleAndRestartIfNeeded() -- >
ActivityStackSupervisor.startSpecificActivityLocked() -- >
将会 ActivityManagerService mService.startProcessLocked() 去fork子进程;
01-02 07:58:33.142 487 962 D hhh : ActivityStackSupervisor$startSpecificActivityLocked() , next step: mService.startProcessLocked fork child process ...
01-02 07:58:33.142 487 962 D hhh : java.lang.Exception
01-02 07:58:33.142 487 962 D hhh : at com.android.server.am.ActivityStackSupervisor.startSpecificActivityLocked(ActivityStackSupervisor.java:1608)
01-02 07:58:33.142 487 962 D hhh : at com.android.server.am.ActivityStack.makeVisibleAndRestartIfNeeded(ActivityStack.java:2082)
01-02 07:58:33.142 487 962 D hhh : at com.android.server.am.ActivityStack.ensureActivitiesVisibleLocked(ActivityStack.java:1883)
01-02 07:58:33.142 487 962 D hhh : at com.android.server.am.ActivityStackSupervisor.ensureActivitiesVisibleLocked(ActivityStackSupervisor.java:3390)
01-02 07:58:33.142 487 962 D hhh : at com.android.server.am.ActivityStack.completePauseLocked(ActivityStack.java:1545)
01-02 07:58:33.142 487 962 D hhh : at com.android.server.am.ActivityStack.activityPausedLocked(ActivityStack.java:1419)
01-02 07:58:33.142 487 962 D hhh : at com.android.server.am.ActivityManagerService.activityPaused(ActivityManagerService.java:7520)
01-02 07:58:33.142 487 962 D hhh : at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:317)
01-02 07:58:33.142 487 962 D hhh : at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2934)
01-02 07:58:33.142 487 962 D hhh : at android.os.Binder.execTransact(Binder.java:723)
1.4 创建子进程 startProcessLocked() -- > Process.start() -- > ZygoteProcess$start() --- > startViaZygote() --- > zygoteSendArgsAndGetResult()
通过zygote socket方式和Zygote进程通信 -- > ZygoteServer$runSelectLoop() -- > acceptCommandPeer()建立客户端连接,然后ZygoteConnection$processOneCommand()
-- > Zygote.forkAndSpecialize()和handleChildProc返回Runnable对象(包装了参数ActivityThread$main()) -- > ZygoteInit$main()调用Runnable 对象caller.run()
// ZygoteInit$main()调用Runnable 对象caller.run()参见:
frameworks/base/core/java/com/android/internal/os/RuntimeInit.java#435
进入到ActivityThread$main() -- > Binder 方式远程调用 ActivityManagerService$attachApplication() -- > attachApplicationLocked()
-- > ActivityStackSupervisor$attachApplicationLocked(app)-- > realStartActivityLocked() -- >
Binder方式远程调用 ActivityThread$scheduleLaunchActivity() -- > H sendMessage LAUNCH_ACTIVITY -- > handleLaunchActivity()
-- > ActivityThread$performLaunchActivity() -- > Instrumentation.callActivityOnCreate() -- > Activity.performCreate() -- > FileManagerActivity.onCreate
01-02 07:58:33.220 4198 4198 D hhh : ActivityThread$main() start ...
01-02 07:58:33.269 4198 4198 D hhh : ActivityThread$attach() ,next step: mgr.attachApplication(mAppThread) ...
01-02 07:58:33.280 487 1039 D hhh : ActivityStackSupervisor$realStartActivityLocked() start ...
01-02 07:58:33.343 487 1039 D hhh : ActivityStackSupervisor$realStartActivityLocked() ,Binder next step: app.thread.scheduleLaunchActivity ...
01-02 07:58:33.347 4198 4212 D hhh : ActivityThread$scheduleLaunchActivity() , sendMessage LAUNCH_ACTIVITY ...
01-02 07:58:33.550 4198 4198 D hhh : ActivityThreadSupervisor$handleLaunchActivity() start ...
// Activity 进入到onCreate()
01-02 07:58:33.616 4198 4198 D hhh : ActivityThreadSupervisor$handleLaunchActivity() , next step: performLaunchActivity() will create Activity and Context , onCreate()...
// 进入到应用的onCreate()
01-02 07:58:33.689 4198 4198 D hhh : FileManagerActivity$onCreate() ...
01-02 07:58:33.689 4198 4198 D hhh : java.lang.Exception
01-02 07:58:33.689 4198 4198 D hhh : at com.sprd.fileexplorer.activities.FileManagerActivity.onCreate(FileManagerActivity.java:182)
01-02 07:58:33.689 4198 4198 D hhh : at android.app.Activity.performCreate(Activity.java:7001)
01-02 07:58:33.689 4198 4198 D hhh : at android.app.Activity.performCreate(Activity.java:6992)
01-02 07:58:33.689 4198 4198 D hhh : at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1217)
01-02 07:58:33.689 4198 4198 D hhh : at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2813)
01-02 07:58:33.689 4198 4198 D hhh : at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2956)
01-02 07:58:33.689 4198 4198 D hhh : at android.app.ActivityThread.-wrap12(Unknown Source:0)
01-02 07:58:33.689 4198 4198 D hhh : at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1651)
01-02 07:58:33.689 4198 4198 D hhh : at android.os.Handler.dispatchMessage(Handler.java:106)
01-02 07:58:33.689 4198 4198 D hhh : at android.os.Looper.loop(Looper.java:164)
01-02 07:58:33.689 4198 4198 D hhh : at android.app.ActivityThread.main(ActivityThread.java:6719)
01-02 07:58:33.689 4198 4198 D hhh : at java.lang.reflect.Method.invoke(Native Method)
01-02 07:58:33.689 4198 4198 D hhh : at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:449)
01-02 07:58:33.689 4198 4198 D hhh : at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
-------------------
2. App中启动其他Activity
2.1 Activity.startActivityForResult() -- > nstrumentation.execStartActivity() -- > Binder ActivityManagerSerivce$startActivity()
01-02 07:59:13.991 4198 4198 D hhh : Instrumentation$execStartActivity(), next step: Binder ActivityManagerSerivce$startActivity()
01-02 07:59:13.991 4198 4198 D hhh : java.lang.Exception
01-02 07:59:13.991 4198 4198 D hhh : at android.app.Instrumentation.execStartActivity(Instrumentation.java:1645)
01-02 07:59:13.991 4198 4198 D hhh : at android.app.Activity.startActivityForResult(Activity.java:4488)
01-02 07:59:13.991 4198 4198 D hhh : at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
01-02 07:59:13.991 4198 4198 D hhh : at android.support.v4.app.FragmentActivity.startActivityForResult(Unknown Source:0)
01-02 07:59:13.991 4198 4198 D hhh : at android.app.Activity.startActivityForResult(Activity.java:4446)
01-02 07:59:13.991 4198 4198 D hhh : at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:725)
01-02 07:59:13.991 4198 4198 D hhh : at android.app.Activity.startActivity(Activity.java:4807)
01-02 07:59:13.991 4198 4198 D hhh : at android.app.Activity.startActivity(Activity.java:4775)
01-02 07:59:13.991 4198 4198 D hhh : at com.sprd.fileexplorer.activities.FileManagerActivity.startFileBrowseActivity(FileManagerActivity.java:417)
01-02 07:59:13.991 4198 4198 D hhh : at com.sprd.fileexplorer.activities.FileManagerActivity.onClick(FileManagerActivity.java:328)
01-02 07:59:13.991 4198 4198 D hhh : at java.lang.reflect.Method.invoke(Native Method)
01-02 07:59:13.991 4198 4198 D hhh : at android.view.View$DeclaredOnClickListener.onClick(View.java:5381)
01-02 07:59:13.991 4198 4198 D hhh : at android.view.View.performClick(View.java:6306)
01-02 07:59:13.991 4198 4198 D hhh : at android.view.View$PerformClick.run(View.java:24806)
01-02 07:59:13.991 4198 4198 D hhh : at android.os.Handler.handleCallback(Handler.java:790)
01-02 07:59:13.991 4198 4198 D hhh : at android.os.Handler.dispatchMessage(Handler.java:99)
01-02 07:59:13.991 4198 4198 D hhh : at android.os.Looper.loop(Looper.java:164)
01-02 07:59:13.991 4198 4198 D hhh : at android.app.ActivityThread.main(ActivityThread.java:6719)
01-02 07:59:13.991 4198 4198 D hhh : at java.lang.reflect.Method.invoke(Native Method)
01-02 07:59:13.991 4198 4198 D hhh : at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:449)
01-02 07:59:13.991 4198 4198 D hhh : at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
01-02 07:59:13.994 487 900 D hhh : ActivityStarter$startActivity() ...
01-02 07:59:13.998 487 900 D hhh : ActivityStarter$startActivity() -- > doPendingActivityLaunchesLocked(false)
01-02 07:59:13.999 487 900 D hhh : ActivityStarter$startActivityUnchecked() start ...
01-02 07:59:14.044 487 900 D hhh : ActivityStarter$startActivityUnchecked() , mTargetStack.startActivityLocked ...
01-02 07:59:14.045 487 900 D hhh : ActivityStack$startActivityLocked() start ...
01-02 07:59:14.045 487 900 D hhh : java.lang.Exception
01-02 07:59:14.045 487 900 D hhh : at com.android.server.am.ActivityStack.startActivityLocked(ActivityStack.java:2890)
01-02 07:59:14.045 487 900 D hhh : at com.android.server.am.ActivityStarter.startActivityUnchecked(ActivityStarter.java:1287)
01-02 07:59:14.045 487 900 D hhh : at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:1061)
01-02 07:59:14.045 487 900 D hhh : at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:614)
01-02 07:59:14.045 487 900 D hhh : at com.android.server.am.ActivityStarter.startActivityLocked(ActivityStarter.java:292)
01-02 07:59:14.045 487 900 D hhh : at com.android.server.am.ActivityStarter.startActivityMayWait(ActivityStarter.java:868)
01-02 07:59:14.045 487 900 D hhh : at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:4576)
01-02 07:59:14.045 487 900 D hhh : at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:4540)
01-02 07:59:14.045 487 900 D hhh : at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:121)
01-02 07:59:14.045 487 900 D hhh : at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2934)
01-02 07:59:14.045 487 900 D hhh : at android.os.Binder.execTransact(Binder.java:723)
2.2 Binder ActivityManagerSerivce$startActivity() -- > ActivityStack$startPausingLocked()
01-02 07:59:14.051 487 900 D hhh : ActivityStarter$startActivityUnchecked() , mSupervisor.resumeFocusedStackTopActivityLocked ...
01-02 07:59:14.054 487 900 D hhh : ActivityStack$startPausingLocked() start ...
01-02 07:59:14.054 487 900 D hhh : java.lang.Exception
01-02 07:59:14.054 487 900 D hhh : at com.android.server.am.ActivityStack.startPausingLocked(ActivityStack.java:1303)
01-02 07:59:14.054 487 900 D hhh : at com.android.server.am.ActivityStack.resumeTopActivityInnerLocked(ActivityStack.java:2432)
01-02 07:59:14.054 487 900 D hhh : at com.android.server.am.ActivityStack.resumeTopActivityUncheckedLocked(ActivityStack.java:2272)
01-02 07:59:14.054 487 900 D hhh : at com.android.server.am.ActivityStackSupervisor.resumeFocusedStackTopActivityLocked(ActivityStackSupervisor.java:2112)
01-02 07:59:14.054 487 900 D hhh : at com.android.server.am.ActivityStarter.startActivityUnchecked(ActivityStarter.java:1315)
01-02 07:59:14.054 487 900 D hhh : at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:1061)
01-02 07:59:14.054 487 900 D hhh : at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:614)
01-02 07:59:14.054 487 900 D hhh : at com.android.server.am.ActivityStarter.startActivityLocked(ActivityStarter.java:292)
01-02 07:59:14.054 487 900 D hhh : at com.android.server.am.ActivityStarter.startActivityMayWait(ActivityStarter.java:868)
01-02 07:59:14.054 487 900 D hhh : at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:4576)
01-02 07:59:14.054 487 900 D hhh : at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:4540)
01-02 07:59:14.054 487 900 D hhh : at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:121)
01-02 07:59:14.054 487 900 D hhh : at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2934)
01-02 07:59:14.054 487 900 D hhh : at android.os.Binder.execTransact(Binder.java:723)
2.3 ActivityStack$startPausingLocked() -- > Binder ActivityThread$schedulePauseActivity() -- > ActivityThread.H --> handlePauseActivity()
01-02 07:59:14.055 487 900 D hhh : ActivityStack$startPausingLocked() ,Binder next step: prev.app.thread.schedulePauseActivity
01-02 07:59:14.056 4198 4212 D hhh : ActivityThread$schedulePauseActivity() sendMessage :PAUSE_ACTIVITY or PAUSE_ACTIVITY_FINISHING
// 执行onPause
01-02 07:59:14.089 4198 4198 D hhh : ActivityThread$handlePauseActivity() , performPauseActivity ...
// Binder方式远程调用 ActivityManagerService$activityPaused(token)-- > ActivityStackSupervisor.startSpecificActivityLocked()
01-02 07:59:14.090 4198 4198 D hhh : ActivityThread$handlePauseActivity() , Binder ActivityManagerService$activityPaused(token)
01-02 07:59:14.091 487 962 D hhh : ActivityStack$activityPausedLocked() start ...
01-02 07:59:14.091 487 962 D hhh : ActivityStack$completePauseLocked() start ...
01-02 07:59:14.092 487 962 D hhh : ActivityStack$completePauseLocked(), next step: mStackSupervisor.resumeFocusedStackTopActivityLocked(topStack, prev, null)
01-02 07:59:14.095 487 962 D hhh : ActivityStackSupervisor$startSpecificActivityLocked() , next step: realStartActivityLocked ...
01-02 07:59:14.095 487 962 D hhh : java.lang.Exception
01-02 07:59:14.095 487 962 D hhh : at com.android.server.am.ActivityStackSupervisor.startSpecificActivityLocked(ActivityStackSupervisor.java:1597)
01-02 07:59:14.095 487 962 D hhh : at com.android.server.am.ActivityStack.resumeTopActivityInnerLocked(ActivityStack.java:2743)
01-02 07:59:14.095 487 962 D hhh : at com.android.server.am.ActivityStack.resumeTopActivityUncheckedLocked(ActivityStack.java:2272)
01-02 07:59:14.095 487 962 D hhh : at com.android.server.am.ActivityStackSupervisor.resumeFocusedStackTopActivityLocked(ActivityStackSupervisor.java:2112)
01-02 07:59:14.095 487 962 D hhh : at com.android.server.am.ActivityStack.completePauseLocked(ActivityStack.java:1499)
01-02 07:59:14.095 487 962 D hhh : at com.android.server.am.ActivityStack.activityPausedLocked(ActivityStack.java:1419)
01-02 07:59:14.095 487 962 D hhh : at com.android.server.am.ActivityManagerService.activityPaused(ActivityManagerService.java:7520)
01-02 07:59:14.095 487 962 D hhh : at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:317)
01-02 07:59:14.095 487 962 D hhh : at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2934)
01-02 07:59:14.095 487 962 D hhh : at android.os.Binder.execTransact(Binder.java:723)
// ActivityStackSupervisor.startSpecificActivityLocked() -- > ActivityStackSupervisor$realStartActivityLocked()
01-02 07:59:14.095 487 962 D hhh : ActivityStackSupervisor$realStartActivityLocked() start ...
01-02 07:59:14.116 487 962 D hhh : ActivityStackSupervisor$realStartActivityLocked() ,Binder next step: app.thread.scheduleLaunchActivity ...
01-02 07:59:14.118 4198 4212 D hhh : ActivityThread$scheduleLaunchActivity() , sendMessage LAUNCH_ACTIVITY ...
01-02 07:59:14.150 4198 4198 D hhh : ActivityThreadSupervisor$handleLaunchActivity() start ...
// 进入Activity onCreate()
01-02 07:59:14.152 4198 4198 D hhh : ActivityThreadSupervisor$handleLaunchActivity() , next step: performLaunchActivity() will create Activity and Context , onCreate()...
01-02 07:59:14.184 4198 4198 D hhh : FileBrowseActivity$onCreate() ...
01-02 07:59:14.184 4198 4198 D hhh : java.lang.Exception
01-02 07:59:14.184 4198 4198 D hhh : at com.sprd.fileexplorer.activities.FileBrowseActivity.onCreate(FileBrowseActivity.java:74)
01-02 07:59:14.184 4198 4198 D hhh : at android.app.Activity.performCreate(Activity.java:7001)
01-02 07:59:14.184 4198 4198 D hhh : at android.app.Activity.performCreate(Activity.java:6992)
01-02 07:59:14.184 4198 4198 D hhh : at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1217)
01-02 07:59:14.184 4198 4198 D hhh : at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2813)
01-02 07:59:14.184 4198 4198 D hhh : at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2956)
01-02 07:59:14.184 4198 4198 D hhh : at android.app.ActivityThread.-wrap12(Unknown Source:0)
01-02 07:59:14.184 4198 4198 D hhh : at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1651)
01-02 07:59:14.184 4198 4198 D hhh : at android.os.Handler.dispatchMessage(Handler.java:106)
01-02 07:59:14.184 4198 4198 D hhh : at android.os.Looper.loop(Looper.java:164)
01-02 07:59:14.184 4198 4198 D hhh : at android.app.ActivityThread.main(ActivityThread.java:6719)
01-02 07:59:14.184 4198 4198 D hhh : at java.lang.reflect.Method.invoke(Native Method)
01-02 07:59:14.184 4198 4198 D hhh : at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:449)
01-02 07:59:14.184 4198 4198 D hhh : at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
从两种启动方式可知,Launcher启动和App启动,区别在于前者将调用startProcessLocked创建子进程,创建好后,在ActivityThread的main()中调用attach()方法,
逐步到 ActivityStackSupervisor$realStartActivityLocked();而后者不需要创建子进程,仅仅创建Activity.
该堆栈分为两部分:
(1) launcher 点击启动App
(2) App中启动其他Activity
第一部分: Launcer 启动Activity
1.1 执行顺序 Activity.startActivityForResult() -- > Instrumentation.execStartActivity() -- > ActivityManagerSerivce$startActivity()
通过Activity启动,最后通过Binder方式远程调用ActivityManagerService的startActivity()函数
01-02 07:58:32.883 1528 1528 D hhh : Instrumentation$execStartActivity(), next step: Binder ActivityManagerSerivce$startActivity()
01-02 07:58:32.883 1528 1528 D hhh : java.lang.Exception
01-02 07:58:32.883 1528 1528 D hhh : at android.app.Instrumentation.execStartActivity(Instrumentation.java:1645)
01-02 07:58:32.883 1528 1528 D hhh : at android.app.Activity.startActivityForResult(Activity.java:4488)
01-02 07:58:32.883 1528 1528 D hhh : at com.android.launcher3.Launcher.startActivityForResult(Launcher.java:1919)
01-02 07:58:32.883 1528 1528 D hhh : at android.app.Activity.startActivity(Activity.java:4803)
01-02 07:58:32.883 1528 1528 D hhh : at com.android.launcher3.Launcher.startActivitySafely(Launcher.java:2736)
01-02 07:58:32.883 1528 1528 D hhh : at com.android.launcher3.Launcher.startAppShortcutOrInfoActivity(Launcher.java:2495)
01-02 07:58:32.883 1528 1528 D hhh : at com.android.launcher3.Launcher.onClickAppShortcut(Launcher.java:2480)
01-02 07:58:32.883 1528 1528 D hhh : at com.android.launcher3.Launcher.onClick(Launcher.java:2318)
01-02 07:58:32.883 1528 1528 D hhh : at android.view.View.performClick(View.java:6306)
01-02 07:58:32.883 1528 1528 D hhh : at android.view.View$PerformClick.run(View.java:24806)
01-02 07:58:32.883 1528 1528 D hhh : at android.os.Handler.handleCallback(Handler.java:790)
01-02 07:58:32.883 1528 1528 D hhh : at android.os.Handler.dispatchMessage(Handler.java:99)
01-02 07:58:32.883 1528 1528 D hhh : at android.os.Looper.loop(Looper.java:164)
01-02 07:58:32.883 1528 1528 D hhh : at android.app.ActivityThread.main(ActivityThread.java:6719)
01-02 07:58:32.883 1528 1528 D hhh : at java.lang.reflect.Method.invoke(Native Method)
01-02 07:58:32.883 1528 1528 D hhh : at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:449)
01-02 07:58:32.883 1528 1528 D hhh : at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
1.2 执行顺序 ActivityManagerSerivce$startActivity() -- > ActivityManagerService.startActivityAsUser() -- >
ActivityStarter.startActivityMayWait() -- >
ActivityStarter.startActivityLocked() -- >
ActivityStarter.startActivity(parm1) -- >
ActivityStarter.startActivity(parm2) -- >
ActivityStarter.startActivityUnchecked();
该方法将顺序调用两处:mTargetStack.startActivityLocked()和 mSupervisor.resumeFocusedStackTopActivityLocked()
1.2.1 顺序调用ActivityStarter.startActivityUnchecked() -- > mTargetStack.startActivityLocked()的堆栈
01-02 07:58:32.919 487 1039 D hhh : ActivityStarter$startActivity() ...
01-02 07:58:32.929 487 1039 D hhh : ActivityStarter$startActivity() -- > doPendingActivityLaunchesLocked(false)
01-02 07:58:32.930 487 1039 D hhh : ActivityStarter$startActivityUnchecked() start ...
01-02 07:58:32.945 487 1039 D hhh : ActivityStarter$startActivityUnchecked() , mTargetStack.startActivityLocked ...
01-02 07:58:32.945 487 1039 D hhh : ActivityStack$startActivityLocked() start ...
01-02 07:58:32.945 487 1039 D hhh : java.lang.Exception
01-02 07:58:32.945 487 1039 D hhh : at com.android.server.am.ActivityStack.startActivityLocked(ActivityStack.java:2890)
01-02 07:58:32.945 487 1039 D hhh : at com.android.server.am.ActivityStarter.startActivityUnchecked(ActivityStarter.java:1287)
01-02 07:58:32.945 487 1039 D hhh : at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:1061)
01-02 07:58:32.945 487 1039 D hhh : at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:614)
01-02 07:58:32.945 487 1039 D hhh : at com.android.server.am.ActivityStarter.startActivityLocked(ActivityStarter.java:292)
01-02 07:58:32.945 487 1039 D hhh : at com.android.server.am.ActivityStarter.startActivityMayWait(ActivityStarter.java:868)
01-02 07:58:32.945 487 1039 D hhh : at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:4576)
01-02 07:58:32.945 487 1039 D hhh : at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:4540)
01-02 07:58:32.945 487 1039 D hhh : at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:121)
01-02 07:58:32.945 487 1039 D hhh : at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2934)
01-02 07:58:32.945 487 1039 D hhh : at android.os.Binder.execTransact(Binder.java:723)
1.2.2 顺序调用ActivityStarter.startActivityUnchecked() -- >
mSupervisor.resumeFocusedStackTopActivityLocked的堆栈 -- >
ActivityStack.resumeTopActivityUncheckedLocked() -- >
ActivityStack.resumeTopActivityInnerLocked() -- >
ActivityStackSupervisor.pauseBackStacks() -- >
ActivityStack.startPausingLocked() -- >
01-02 07:58:32.955 487 1039 D hhh : ActivityStarter$startActivityUnchecked() , mSupervisor.resumeFocusedStackTopActivityLocked ...
01-02 07:58:32.957 487 1039 D hhh : ActivityStack$startPausingLocked() start ...
01-02 07:58:32.957 487 1039 D hhh : java.lang.Exception
01-02 07:58:32.957 487 1039 D hhh : at com.android.server.am.ActivityStack.startPausingLocked(ActivityStack.java:1303)
01-02 07:58:32.957 487 1039 D hhh : at com.android.server.am.ActivityStackSupervisor.pauseBackStacks(ActivityStackSupervisor.java:1077)
01-02 07:58:32.957 487 1039 D hhh : at com.android.server.am.ActivityStack.resumeTopActivityInnerLocked(ActivityStack.java:2428)
01-02 07:58:32.957 487 1039 D hhh : at com.android.server.am.ActivityStack.resumeTopActivityUncheckedLocked(ActivityStack.java:2272)
01-02 07:58:32.957 487 1039 D hhh : at com.android.server.am.ActivityStackSupervisor.resumeFocusedStackTopActivityLocked(ActivityStackSupervisor.java:2112)
01-02 07:58:32.957 487 1039 D hhh : at com.android.server.am.ActivityStarter.startActivityUnchecked(ActivityStarter.java:1315)
01-02 07:58:32.957 487 1039 D hhh : at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:1061)
01-02 07:58:32.957 487 1039 D hhh : at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:614)
01-02 07:58:32.957 487 1039 D hhh : at com.android.server.am.ActivityStarter.startActivityLocked(ActivityStarter.java:292)
01-02 07:58:32.957 487 1039 D hhh : at com.android.server.am.ActivityStarter.startActivityMayWait(ActivityStarter.java:868)
01-02 07:58:32.957 487 1039 D hhh : at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:4576)
01-02 07:58:32.957 487 1039 D hhh : at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:4540)
01-02 07:58:32.957 487 1039 D hhh : at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:121)
01-02 07:58:32.957 487 1039 D hhh : at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2934)
01-02 07:58:32.957 487 1039 D hhh : at android.os.Binder.execTransact(Binder.java:723)
1.3 执行顺序 ActivityStack.startPausingLocked() -- > Binder 方式远程调用 ActivityThread$schedulePauseActivity() -- >Handler sendMessage -- > handlePauseActivity()
01-02 07:58:32.959 487 1039 D hhh : ActivityStack$startPausingLocked() ,Binder next step: prev.app.thread.schedulePauseActivity
01-02 07:58:32.960 1528 1553 D hhh : ActivityThread$schedulePauseActivity() sendMessage :PAUSE_ACTIVITY or PAUSE_ACTIVITY_FINISHING
// 执行原Activity的onPause
01-02 07:58:32.999 1528 1528 D hhh : ActivityThread$handlePauseActivity() , performPauseActivity ...
// Binder方式远程调用 ActivityManagerService$activityPaused(token),堆栈如下面
01-02 07:58:33.034 1528 1528 D hhh : ActivityThread$handlePauseActivity() , Binder ActivityManagerService$activityPaused(token)
01-02 07:58:33.047 487 962 D hhh : ActivityStack$activityPausedLocked() start ...
01-02 07:58:33.047 487 962 D hhh : ActivityStack$completePauseLocked() start ...
01-02 07:58:33.048 487 962 D hhh : ActivityStack$completePauseLocked(), next step: mStackSupervisor.resumeFocusedStackTopActivityLocked(topStack, prev, null)
// 堆栈:
ActivityManagerService.activityPaused() -- >
ActivityStack.activityPausedLocked() -- >
ActivityStack.completePauseLocked()
该方法将执行两部分:ActivityStackSupervisor.resumeFocusedStackTopActivityLocked() 和 ActivityStackSupervisor.ensureActivitiesVisibleLocked()
1.3.1 顺序执行1 ActivityStack.completePauseLocked() -- >
ActivityStackSupervisor.resumeFocusedStackTopActivityLocked() -- >
ActivityStack.resumeTopActivityUncheckedLocked() -- >
ActivityStack.resumeTopActivityInnerLocked() -- >
ActivityStackSupervisor.startSpecificActivityLocked() -- >
将会 ActivityManagerService mService.startProcessLocked() 去fork子进程;
01-02 07:58:33.059 487 962 D hhh : ActivityStackSupervisor$startSpecificActivityLocked() , next step: mService.startProcessLocked fork child process ...
01-02 07:58:33.059 487 962 D hhh : java.lang.Exception
01-02 07:58:33.059 487 962 D hhh : at com.android.server.am.ActivityStackSupervisor.startSpecificActivityLocked(ActivityStackSupervisor.java:1608)
01-02 07:58:33.059 487 962 D hhh : at com.android.server.am.ActivityStack.resumeTopActivityInnerLocked(ActivityStack.java:2743)
01-02 07:58:33.059 487 962 D hhh : at com.android.server.am.ActivityStack.resumeTopActivityUncheckedLocked(ActivityStack.java:2272)
01-02 07:58:33.059 487 962 D hhh : at com.android.server.am.ActivityStackSupervisor.resumeFocusedStackTopActivityLocked(ActivityStackSupervisor.java:2112)
01-02 07:58:33.059 487 962 D hhh : at com.android.server.am.ActivityStack.completePauseLocked(ActivityStack.java:1499)
01-02 07:58:33.059 487 962 D hhh : at com.android.server.am.ActivityStack.activityPausedLocked(ActivityStack.java:1419)
01-02 07:58:33.059 487 962 D hhh : at com.android.server.am.ActivityManagerService.activityPaused(ActivityManagerService.java:7520)
01-02 07:58:33.059 487 962 D hhh : at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:317)
01-02 07:58:33.059 487 962 D hhh : at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2934)
01-02 07:58:33.059 487 962 D hhh : at android.os.Binder.execTransact(Binder.java:723)
1.3.2 顺序执行2 ActivityStack.completePauseLocked() -- >
ActivityStackSupervisor.ensureActivitiesVisibleLocked() -- >
ActivityStack.ensureActivitiesVisibleLocked() -- >
ActivityStack.makeVisibleAndRestartIfNeeded() -- >
ActivityStackSupervisor.startSpecificActivityLocked() -- >
将会 ActivityManagerService mService.startProcessLocked() 去fork子进程;
01-02 07:58:33.142 487 962 D hhh : ActivityStackSupervisor$startSpecificActivityLocked() , next step: mService.startProcessLocked fork child process ...
01-02 07:58:33.142 487 962 D hhh : java.lang.Exception
01-02 07:58:33.142 487 962 D hhh : at com.android.server.am.ActivityStackSupervisor.startSpecificActivityLocked(ActivityStackSupervisor.java:1608)
01-02 07:58:33.142 487 962 D hhh : at com.android.server.am.ActivityStack.makeVisibleAndRestartIfNeeded(ActivityStack.java:2082)
01-02 07:58:33.142 487 962 D hhh : at com.android.server.am.ActivityStack.ensureActivitiesVisibleLocked(ActivityStack.java:1883)
01-02 07:58:33.142 487 962 D hhh : at com.android.server.am.ActivityStackSupervisor.ensureActivitiesVisibleLocked(ActivityStackSupervisor.java:3390)
01-02 07:58:33.142 487 962 D hhh : at com.android.server.am.ActivityStack.completePauseLocked(ActivityStack.java:1545)
01-02 07:58:33.142 487 962 D hhh : at com.android.server.am.ActivityStack.activityPausedLocked(ActivityStack.java:1419)
01-02 07:58:33.142 487 962 D hhh : at com.android.server.am.ActivityManagerService.activityPaused(ActivityManagerService.java:7520)
01-02 07:58:33.142 487 962 D hhh : at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:317)
01-02 07:58:33.142 487 962 D hhh : at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2934)
01-02 07:58:33.142 487 962 D hhh : at android.os.Binder.execTransact(Binder.java:723)
1.4 创建子进程 startProcessLocked() -- > Process.start() -- > ZygoteProcess$start() --- > startViaZygote() --- > zygoteSendArgsAndGetResult()
通过zygote socket方式和Zygote进程通信 -- > ZygoteServer$runSelectLoop() -- > acceptCommandPeer()建立客户端连接,然后ZygoteConnection$processOneCommand()
-- > Zygote.forkAndSpecialize()和handleChildProc返回Runnable对象(包装了参数ActivityThread$main()) -- > ZygoteInit$main()调用Runnable 对象caller.run()
// ZygoteInit$main()调用Runnable 对象caller.run()参见:
frameworks/base/core/java/com/android/internal/os/RuntimeInit.java#435
进入到ActivityThread$main() -- > Binder 方式远程调用 ActivityManagerService$attachApplication() -- > attachApplicationLocked()
-- > ActivityStackSupervisor$attachApplicationLocked(app)-- > realStartActivityLocked() -- >
Binder方式远程调用 ActivityThread$scheduleLaunchActivity() -- > H sendMessage LAUNCH_ACTIVITY -- > handleLaunchActivity()
-- > ActivityThread$performLaunchActivity() -- > Instrumentation.callActivityOnCreate() -- > Activity.performCreate() -- > FileManagerActivity.onCreate
01-02 07:58:33.220 4198 4198 D hhh : ActivityThread$main() start ...
01-02 07:58:33.269 4198 4198 D hhh : ActivityThread$attach() ,next step: mgr.attachApplication(mAppThread) ...
01-02 07:58:33.280 487 1039 D hhh : ActivityStackSupervisor$realStartActivityLocked() start ...
01-02 07:58:33.343 487 1039 D hhh : ActivityStackSupervisor$realStartActivityLocked() ,Binder next step: app.thread.scheduleLaunchActivity ...
01-02 07:58:33.347 4198 4212 D hhh : ActivityThread$scheduleLaunchActivity() , sendMessage LAUNCH_ACTIVITY ...
01-02 07:58:33.550 4198 4198 D hhh : ActivityThreadSupervisor$handleLaunchActivity() start ...
// Activity 进入到onCreate()
01-02 07:58:33.616 4198 4198 D hhh : ActivityThreadSupervisor$handleLaunchActivity() , next step: performLaunchActivity() will create Activity and Context , onCreate()...
// 进入到应用的onCreate()
01-02 07:58:33.689 4198 4198 D hhh : FileManagerActivity$onCreate() ...
01-02 07:58:33.689 4198 4198 D hhh : java.lang.Exception
01-02 07:58:33.689 4198 4198 D hhh : at com.sprd.fileexplorer.activities.FileManagerActivity.onCreate(FileManagerActivity.java:182)
01-02 07:58:33.689 4198 4198 D hhh : at android.app.Activity.performCreate(Activity.java:7001)
01-02 07:58:33.689 4198 4198 D hhh : at android.app.Activity.performCreate(Activity.java:6992)
01-02 07:58:33.689 4198 4198 D hhh : at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1217)
01-02 07:58:33.689 4198 4198 D hhh : at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2813)
01-02 07:58:33.689 4198 4198 D hhh : at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2956)
01-02 07:58:33.689 4198 4198 D hhh : at android.app.ActivityThread.-wrap12(Unknown Source:0)
01-02 07:58:33.689 4198 4198 D hhh : at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1651)
01-02 07:58:33.689 4198 4198 D hhh : at android.os.Handler.dispatchMessage(Handler.java:106)
01-02 07:58:33.689 4198 4198 D hhh : at android.os.Looper.loop(Looper.java:164)
01-02 07:58:33.689 4198 4198 D hhh : at android.app.ActivityThread.main(ActivityThread.java:6719)
01-02 07:58:33.689 4198 4198 D hhh : at java.lang.reflect.Method.invoke(Native Method)
01-02 07:58:33.689 4198 4198 D hhh : at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:449)
01-02 07:58:33.689 4198 4198 D hhh : at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
-------------------
2. App中启动其他Activity
2.1 Activity.startActivityForResult() -- > nstrumentation.execStartActivity() -- > Binder ActivityManagerSerivce$startActivity()
01-02 07:59:13.991 4198 4198 D hhh : Instrumentation$execStartActivity(), next step: Binder ActivityManagerSerivce$startActivity()
01-02 07:59:13.991 4198 4198 D hhh : java.lang.Exception
01-02 07:59:13.991 4198 4198 D hhh : at android.app.Instrumentation.execStartActivity(Instrumentation.java:1645)
01-02 07:59:13.991 4198 4198 D hhh : at android.app.Activity.startActivityForResult(Activity.java:4488)
01-02 07:59:13.991 4198 4198 D hhh : at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
01-02 07:59:13.991 4198 4198 D hhh : at android.support.v4.app.FragmentActivity.startActivityForResult(Unknown Source:0)
01-02 07:59:13.991 4198 4198 D hhh : at android.app.Activity.startActivityForResult(Activity.java:4446)
01-02 07:59:13.991 4198 4198 D hhh : at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:725)
01-02 07:59:13.991 4198 4198 D hhh : at android.app.Activity.startActivity(Activity.java:4807)
01-02 07:59:13.991 4198 4198 D hhh : at android.app.Activity.startActivity(Activity.java:4775)
01-02 07:59:13.991 4198 4198 D hhh : at com.sprd.fileexplorer.activities.FileManagerActivity.startFileBrowseActivity(FileManagerActivity.java:417)
01-02 07:59:13.991 4198 4198 D hhh : at com.sprd.fileexplorer.activities.FileManagerActivity.onClick(FileManagerActivity.java:328)
01-02 07:59:13.991 4198 4198 D hhh : at java.lang.reflect.Method.invoke(Native Method)
01-02 07:59:13.991 4198 4198 D hhh : at android.view.View$DeclaredOnClickListener.onClick(View.java:5381)
01-02 07:59:13.991 4198 4198 D hhh : at android.view.View.performClick(View.java:6306)
01-02 07:59:13.991 4198 4198 D hhh : at android.view.View$PerformClick.run(View.java:24806)
01-02 07:59:13.991 4198 4198 D hhh : at android.os.Handler.handleCallback(Handler.java:790)
01-02 07:59:13.991 4198 4198 D hhh : at android.os.Handler.dispatchMessage(Handler.java:99)
01-02 07:59:13.991 4198 4198 D hhh : at android.os.Looper.loop(Looper.java:164)
01-02 07:59:13.991 4198 4198 D hhh : at android.app.ActivityThread.main(ActivityThread.java:6719)
01-02 07:59:13.991 4198 4198 D hhh : at java.lang.reflect.Method.invoke(Native Method)
01-02 07:59:13.991 4198 4198 D hhh : at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:449)
01-02 07:59:13.991 4198 4198 D hhh : at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
01-02 07:59:13.994 487 900 D hhh : ActivityStarter$startActivity() ...
01-02 07:59:13.998 487 900 D hhh : ActivityStarter$startActivity() -- > doPendingActivityLaunchesLocked(false)
01-02 07:59:13.999 487 900 D hhh : ActivityStarter$startActivityUnchecked() start ...
01-02 07:59:14.044 487 900 D hhh : ActivityStarter$startActivityUnchecked() , mTargetStack.startActivityLocked ...
01-02 07:59:14.045 487 900 D hhh : ActivityStack$startActivityLocked() start ...
01-02 07:59:14.045 487 900 D hhh : java.lang.Exception
01-02 07:59:14.045 487 900 D hhh : at com.android.server.am.ActivityStack.startActivityLocked(ActivityStack.java:2890)
01-02 07:59:14.045 487 900 D hhh : at com.android.server.am.ActivityStarter.startActivityUnchecked(ActivityStarter.java:1287)
01-02 07:59:14.045 487 900 D hhh : at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:1061)
01-02 07:59:14.045 487 900 D hhh : at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:614)
01-02 07:59:14.045 487 900 D hhh : at com.android.server.am.ActivityStarter.startActivityLocked(ActivityStarter.java:292)
01-02 07:59:14.045 487 900 D hhh : at com.android.server.am.ActivityStarter.startActivityMayWait(ActivityStarter.java:868)
01-02 07:59:14.045 487 900 D hhh : at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:4576)
01-02 07:59:14.045 487 900 D hhh : at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:4540)
01-02 07:59:14.045 487 900 D hhh : at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:121)
01-02 07:59:14.045 487 900 D hhh : at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2934)
01-02 07:59:14.045 487 900 D hhh : at android.os.Binder.execTransact(Binder.java:723)
2.2 Binder ActivityManagerSerivce$startActivity() -- > ActivityStack$startPausingLocked()
01-02 07:59:14.051 487 900 D hhh : ActivityStarter$startActivityUnchecked() , mSupervisor.resumeFocusedStackTopActivityLocked ...
01-02 07:59:14.054 487 900 D hhh : ActivityStack$startPausingLocked() start ...
01-02 07:59:14.054 487 900 D hhh : java.lang.Exception
01-02 07:59:14.054 487 900 D hhh : at com.android.server.am.ActivityStack.startPausingLocked(ActivityStack.java:1303)
01-02 07:59:14.054 487 900 D hhh : at com.android.server.am.ActivityStack.resumeTopActivityInnerLocked(ActivityStack.java:2432)
01-02 07:59:14.054 487 900 D hhh : at com.android.server.am.ActivityStack.resumeTopActivityUncheckedLocked(ActivityStack.java:2272)
01-02 07:59:14.054 487 900 D hhh : at com.android.server.am.ActivityStackSupervisor.resumeFocusedStackTopActivityLocked(ActivityStackSupervisor.java:2112)
01-02 07:59:14.054 487 900 D hhh : at com.android.server.am.ActivityStarter.startActivityUnchecked(ActivityStarter.java:1315)
01-02 07:59:14.054 487 900 D hhh : at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:1061)
01-02 07:59:14.054 487 900 D hhh : at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:614)
01-02 07:59:14.054 487 900 D hhh : at com.android.server.am.ActivityStarter.startActivityLocked(ActivityStarter.java:292)
01-02 07:59:14.054 487 900 D hhh : at com.android.server.am.ActivityStarter.startActivityMayWait(ActivityStarter.java:868)
01-02 07:59:14.054 487 900 D hhh : at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:4576)
01-02 07:59:14.054 487 900 D hhh : at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:4540)
01-02 07:59:14.054 487 900 D hhh : at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:121)
01-02 07:59:14.054 487 900 D hhh : at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2934)
01-02 07:59:14.054 487 900 D hhh : at android.os.Binder.execTransact(Binder.java:723)
2.3 ActivityStack$startPausingLocked() -- > Binder ActivityThread$schedulePauseActivity() -- > ActivityThread.H --> handlePauseActivity()
01-02 07:59:14.055 487 900 D hhh : ActivityStack$startPausingLocked() ,Binder next step: prev.app.thread.schedulePauseActivity
01-02 07:59:14.056 4198 4212 D hhh : ActivityThread$schedulePauseActivity() sendMessage :PAUSE_ACTIVITY or PAUSE_ACTIVITY_FINISHING
// 执行onPause
01-02 07:59:14.089 4198 4198 D hhh : ActivityThread$handlePauseActivity() , performPauseActivity ...
// Binder方式远程调用 ActivityManagerService$activityPaused(token)-- > ActivityStackSupervisor.startSpecificActivityLocked()
01-02 07:59:14.090 4198 4198 D hhh : ActivityThread$handlePauseActivity() , Binder ActivityManagerService$activityPaused(token)
01-02 07:59:14.091 487 962 D hhh : ActivityStack$activityPausedLocked() start ...
01-02 07:59:14.091 487 962 D hhh : ActivityStack$completePauseLocked() start ...
01-02 07:59:14.092 487 962 D hhh : ActivityStack$completePauseLocked(), next step: mStackSupervisor.resumeFocusedStackTopActivityLocked(topStack, prev, null)
01-02 07:59:14.095 487 962 D hhh : ActivityStackSupervisor$startSpecificActivityLocked() , next step: realStartActivityLocked ...
01-02 07:59:14.095 487 962 D hhh : java.lang.Exception
01-02 07:59:14.095 487 962 D hhh : at com.android.server.am.ActivityStackSupervisor.startSpecificActivityLocked(ActivityStackSupervisor.java:1597)
01-02 07:59:14.095 487 962 D hhh : at com.android.server.am.ActivityStack.resumeTopActivityInnerLocked(ActivityStack.java:2743)
01-02 07:59:14.095 487 962 D hhh : at com.android.server.am.ActivityStack.resumeTopActivityUncheckedLocked(ActivityStack.java:2272)
01-02 07:59:14.095 487 962 D hhh : at com.android.server.am.ActivityStackSupervisor.resumeFocusedStackTopActivityLocked(ActivityStackSupervisor.java:2112)
01-02 07:59:14.095 487 962 D hhh : at com.android.server.am.ActivityStack.completePauseLocked(ActivityStack.java:1499)
01-02 07:59:14.095 487 962 D hhh : at com.android.server.am.ActivityStack.activityPausedLocked(ActivityStack.java:1419)
01-02 07:59:14.095 487 962 D hhh : at com.android.server.am.ActivityManagerService.activityPaused(ActivityManagerService.java:7520)
01-02 07:59:14.095 487 962 D hhh : at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:317)
01-02 07:59:14.095 487 962 D hhh : at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2934)
01-02 07:59:14.095 487 962 D hhh : at android.os.Binder.execTransact(Binder.java:723)
// ActivityStackSupervisor.startSpecificActivityLocked() -- > ActivityStackSupervisor$realStartActivityLocked()
01-02 07:59:14.095 487 962 D hhh : ActivityStackSupervisor$realStartActivityLocked() start ...
01-02 07:59:14.116 487 962 D hhh : ActivityStackSupervisor$realStartActivityLocked() ,Binder next step: app.thread.scheduleLaunchActivity ...
01-02 07:59:14.118 4198 4212 D hhh : ActivityThread$scheduleLaunchActivity() , sendMessage LAUNCH_ACTIVITY ...
01-02 07:59:14.150 4198 4198 D hhh : ActivityThreadSupervisor$handleLaunchActivity() start ...
// 进入Activity onCreate()
01-02 07:59:14.152 4198 4198 D hhh : ActivityThreadSupervisor$handleLaunchActivity() , next step: performLaunchActivity() will create Activity and Context , onCreate()...
01-02 07:59:14.184 4198 4198 D hhh : FileBrowseActivity$onCreate() ...
01-02 07:59:14.184 4198 4198 D hhh : java.lang.Exception
01-02 07:59:14.184 4198 4198 D hhh : at com.sprd.fileexplorer.activities.FileBrowseActivity.onCreate(FileBrowseActivity.java:74)
01-02 07:59:14.184 4198 4198 D hhh : at android.app.Activity.performCreate(Activity.java:7001)
01-02 07:59:14.184 4198 4198 D hhh : at android.app.Activity.performCreate(Activity.java:6992)
01-02 07:59:14.184 4198 4198 D hhh : at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1217)
01-02 07:59:14.184 4198 4198 D hhh : at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2813)
01-02 07:59:14.184 4198 4198 D hhh : at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2956)
01-02 07:59:14.184 4198 4198 D hhh : at android.app.ActivityThread.-wrap12(Unknown Source:0)
01-02 07:59:14.184 4198 4198 D hhh : at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1651)
01-02 07:59:14.184 4198 4198 D hhh : at android.os.Handler.dispatchMessage(Handler.java:106)
01-02 07:59:14.184 4198 4198 D hhh : at android.os.Looper.loop(Looper.java:164)
01-02 07:59:14.184 4198 4198 D hhh : at android.app.ActivityThread.main(ActivityThread.java:6719)
01-02 07:59:14.184 4198 4198 D hhh : at java.lang.reflect.Method.invoke(Native Method)
01-02 07:59:14.184 4198 4198 D hhh : at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:449)
01-02 07:59:14.184 4198 4198 D hhh : at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
从两种启动方式可知,Launcher启动和App启动,区别在于前者将调用startProcessLocked创建子进程,创建好后,在ActivityThread的main()中调用attach()方法,
逐步到 ActivityStackSupervisor$realStartActivityLocked();而后者不需要创建子进程,仅仅创建Activity.