8.1 平台Activity启动流程

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.


猜你喜欢

转载自blog.csdn.net/snail201211/article/details/79321965
8.1
今日推荐