当前位置:   article > 正文

Activity 启动流程log分析_activitytaskmanager: start u0

activitytaskmanager: start u0

为了方便跟踪启动过程中的相关流程,打开了如下开关以及添加了如下Log,

1、添加Log打印
1.1、2个setState()

其中ActivityRecord运行在system_server进程中,ActivityThread运行在App进程中,方法可以完整的反映整个Activity的变化过程,

// 在ActivityRecord.java文件中
void setState(ActivityState state, String reason) {
    if (DEBUG_STATES) Slog.v(TAG_STATES, "State movement: " + this + " from:" + getState()
                    + " to:" + state + " reason:" + reason,new Throwable());
             
// 在ActivityThread.java文件中
public void setState(@LifecycleState int newLifecycleState) {
        mLifecycleState = newLifecycleState;
        Slog.d(TAG,"setState newLifecycleState = " + newLifecycleState ,new Throwable());
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

小技巧:

在Log打印的后面,添加了new Throwable()方法,可以打印当前方法的整个调用链

1.2、Activity生命周期打印

把Activity里面的DEBUG_LIFECYCLE ,可以更直接的看到Activity生命周期的变化

// 在ActivityTaskManagerDebugConfig.java文件中
private static final boolean DEBUG_ALL_ACTIVITIES = DEBUG_ALL || false || true;
static final boolean DEBUG_STACK = DEBUG_ALL || false || true;
static final boolean DEBUG_TASKS = DEBUG_ALL || false || true;

// 在Activity.java文件中
private static final boolean DEBUG_LIFECYCLE = true;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
1.3、ActivityRecrod/ActivityStack/TaskRecord的关联

/在TaskRecord.java里面

static TaskRecord create(ActivityTaskManagerService service, int taskId, ActivityInfo info,
            Intent intent, IVoiceInteractionSession voiceSession,
            IVoiceInteractor voiceInteractor) {
	    Slog.d(TAG,"new TaskRecord tasdkId = " + taskId ,new Throwable());
        return getTaskRecordFactory().create(
                service, taskId, info, intent, voiceSession, voiceInteractor);
}

static TaskRecord create(ActivityTaskManagerService service, int taskId, ActivityInfo info,
            Intent intent, TaskDescription taskDescription) {
        Slog.d(TAG,"new TaskRecord tasdkId = " + taskId ,new Throwable());
        return getTaskRecordFactory().create(service, taskId, info, intent, taskDescription);
}

// 设置ActivityRecord 和TaskRecord的关系
private void addOrReparentStartingActivity(TaskRecord parent, String reason) {
    Slog.d(TAG,"addOrReparentStartingActivity",new Throwable());  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

在ActivityStack.java里面

ActivityStack(ActivityDisplay display, int stackId, ActivityStackSupervisor supervisor,
            int windowingMode, int activityType, boolean onTop) {
	    Slog.d(TAG,"new ActivityStack stackid = " + stackId,new Throwable());
}
  • 1
  • 2
  • 3
  • 4
2、Log分析
2.1、ActivityRecord的创建

从桌面点击DeskClock 图标,会有如下打印

08-23 17:30:21.258  1314  4528 I ActivityTaskManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.deskclock/.DeskClock bnds=[35,503][237,780]} from uid 10081
  • 1

对应的ActivityStarter.startActivity方法

    private int startActivity(...//省略参数) {
        mSupervisor.getActivityMetricsLogger().notifyActivityLaunching(intent);
        int err = ActivityManager.START_SUCCESS;
        ....
        if (err == ActivityManager.START_SUCCESS) {
            Slog.i(TAG, "START u" + userId + " {" + intent.toShortString(true, true, true, false)
                    + "} from uid " + callingUid);
        }
  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在startActivity的方法中,会创建一个ActivityRecord对象,并将初始化状态设置为INITIALIZING

    private int startActivity(...//省略参数) {
        mSupervisor.getActivityMetricsLogger().notifyActivityLaunching(intent);
        int err = ActivityManager.START_SUCCESS;
        .... //省略中间代码
        if (err == ActivityManager.START_SUCCESS) {
            Slog.i(TAG, "START u" + userId + " {" + intent.toShortString(true, true, true, false)
                    + "} from uid " + callingUid);
        }
        .... //省略中间代码
        ActivityRecord r = new ActivityRecord(mService, callerApp, callingPid, callingUid,
                callingPackage, intent, resolvedType, aInfo, mService.getGlobalConfiguration(),
                resultRecord, resultWho, requestCode, componentSpecified, voiceSession != null,
                mSupervisor, checkedOptions, sourceRecord);
  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
08-23 17:30:21.258  1314  4528 I ActivityTaskManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.deskclock/.DeskClock bnds=[35,503][237,780]} from uid 10081
08-23 17:30:21.261  1314  4528 V ActivityTaskManager: State movement: ActivityRecord{ed5f802 u0 com.android.deskclock/.DeskClock t-1} from:null to:INITIALIZING reason:ActivityRecord ctor
08-23 17:30:21.261  1314  4528 V ActivityTaskManager: java.lang.Throwable
08-23 17:30:21.261  1314  4528 V ActivityTaskManager: 	at com.android.server.wm.ActivityRecord.setState(ActivityRecord.java:1857)
08-23 17:30:21.261  1314  4528 V ActivityTaskManager: 	at com.android.server.wm.ActivityRecord.<init>(ActivityRecord.java:964)
08-23 17:30:21.261  1314  4528 V ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.startActivity(ActivityStarter.java:902)
08-23 17:30:21.261  1314  4528 V ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.startActivity(ActivityStarter.java:585)
08-23 17:30:21.261  1314  4528 V ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.startActivityMayWait(ActivityStarter.java:1298)
08-23 17:30:21.261  1314  4528 V ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:516)
08-23 17:30:21.261  1314  4528 V ActivityTaskManager: 	at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1061)
08-23 17:30:21.261  1314  4528 V ActivityTaskManager: 	at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1035)
08-23 17:30:21.261  1314  4528 V ActivityTaskManager: 	at com.android.server.wm.ActivityTaskManagerService.startActivity(ActivityTaskManagerService.java:1012)
08-23 17:30:21.261  1314  4528 V ActivityTaskManager: 	at android.app.IActivityTaskManager$Stub.onTransact(IActivityTaskManager.java:1486)
08-23 17:30:21.261  1314  4528 V ActivityTaskManager: 	at android.os.Binder.execTransactInternal(Binder.java:1021)
08-23 17:30:21.261  1314  4528 V ActivityTaskManager: 	at android.os.Binder.execTransact(Binder.java:994)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

ActivityRecord的构造方法如下

    ActivityRecord() {
        mAtmService = _service;
        mRootActivityContainer = _service.mRootActivityContainer;
        appToken = new Token(this, _intent);
        setState(INITIALIZING, "ActivityRecord ctor");
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
2.2、ActivityStack的创建

由于是首次启动应用,没有可以复用的task,需要创建对应的ActivityStack对象

08-23 17:30:21.282  1314  4528 D ActivityTaskManager: Looking for task of ActivityRecord{ed5f802 u0 com.android.deskclock/.DeskClock t-1}
08-23 17:30:21.283  1314  4528 D ActivityTaskManager: Looking for task of ActivityRecord{ed5f802 u0 com.android.deskclock/.DeskClock t-1} in ActivityStack{1502de5 stackId=0 type=home mode=fullscreen visible=true translucent=false, 1 tasks}
08-23 17:30:21.283  1314  4528 D ActivityTaskManager: Comparing existing cls=com.android.launcher3/.Launcher/aff=null to new cls=com.android.deskclock/.DeskClock/aff=com.android.deskclock
08-23 17:30:21.283  1314  4528 D ActivityTaskManager: Not a match: TaskRecord{6dee666 #83 ?? U=0 StackId=0 sz=1}
08-23 17:30:21.283  1314  4528 D ActivityTaskManager: No task found
08-23 17:30:21.285  1314  4528 D ActivityTaskManager: new ActivityStack stackid = 4
08-23 17:30:21.285  1314  4528 D ActivityTaskManager: java.lang.Throwable
08-23 17:30:21.285  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityStack.<init>(ActivityStack.java:511)
08-23 17:30:21.285  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityDisplay.createStackUnchecked(ActivityDisplay.java:465)
08-23 17:30:21.285  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityDisplay.createStack(ActivityDisplay.java:455)
08-23 17:30:21.285  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityDisplay.getOrCreateStack(ActivityDisplay.java:383)
08-23 17:30:21.285  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityDisplay.getOrCreateStack(ActivityDisplay.java:401)
08-23 17:30:21.285  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.RootActivityContainer.getLaunchStack(RootActivityContainer.java:1737)
08-23 17:30:21.285  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.getLaunchStack(ActivityStarter.java:2704)
08-23 17:30:21.285  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.computeStackFocus(ActivityStarter.java:2612)
08-23 17:30:21.285  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.setTaskFromReuseOrCreateNewTask(ActivityStarter.java:2323)
08-23 17:30:21.285  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.startActivityUnchecked(ActivityStarter.java:1688)
08-23 17:30:21.285  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.startActivity(ActivityStarter.java:1404)
08-23 17:30:21.285  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.startActivity(ActivityStarter.java:935)
08-23 17:30:21.285  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.startActivity(ActivityStarter.java:585)
08-23 17:30:21.285  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.startActivityMayWait(ActivityStarter.java:1298)
08-23 17:30:21.285  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:516)
08-23 17:30:21.285  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1061)
08-23 17:30:21.285  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1035)
08-23 17:30:21.285  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityTaskManagerService.startActivity(ActivityTaskManagerService.java:1012)
08-23 17:30:21.285  1314  4528 D ActivityTaskManager: 	at android.app.IActivityTaskManager$Stub.onTransact(IActivityTaskManager.java:1486)
08-23 17:30:21.285  1314  4528 D ActivityTaskManager: 	at android.os.Binder.execTransactInternal(Binder.java:1021)
08-23 17:30:21.285  1314  4528 D ActivityTaskManager: 	at android.os.Binder.execTransact(Binder.java:994)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

在ActivityStack的构造方法中,会调用ActivityDisplay的addChild方法,将ActivityDisplay与ActivityStack关联起来

display.addChild(this, onTop ? POSITION_TOP : POSITION_BOTTOM);

对应有如下的打印

08-23 17:30:21.290  1314  4528 V ActivityTaskManager: addChild: attaching ActivityStack{f67f949 stackId=4 type=standard mode=fullscreen visible=false translucent=true, 0 tasks} to displayId=0 position=1
  • 1
2.3 TaskRecord创建

创建TaskRecord对象的调用链如下:

08-23 17:30:21.292  1314  4528 D ActivityTaskManager: new TaskRecord tasdkId = 87
08-23 17:30:21.292  1314  4528 D ActivityTaskManager: java.lang.Throwable
08-23 17:30:21.292  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.TaskRecord.create(TaskRecord.java:2704)
08-23 17:30:21.292  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityStack.createTaskRecord(ActivityStack.java:5515)
08-23 17:30:21.292  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.setTaskFromReuseOrCreateNewTask(ActivityStarter.java:2330)
08-23 17:30:21.292  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.startActivityUnchecked(ActivityStarter.java:1688)
08-23 17:30:21.292  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.startActivity(ActivityStarter.java:1404)
08-23 17:30:21.292  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.startActivity(ActivityStarter.java:935)
08-23 17:30:21.292  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.startActivity(ActivityStarter.java:585)
08-23 17:30:21.292  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.startActivityMayWait(ActivityStarter.java:1298)
08-23 17:30:21.292  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:516)
08-23 17:30:21.292  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1061)
08-23 17:30:21.292  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1035)
08-23 17:30:21.292  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityTaskManagerService.startActivity(ActivityTaskManagerService.java:1012)
08-23 17:30:21.292  1314  4528 D ActivityTaskManager: 	at android.app.IActivityTaskManager$Stub.onTransact(IActivityTaskManager.java:1486)
08-23 17:30:21.292  1314  4528 D ActivityTaskManager: 	at android.os.Binder.execTransactInternal(Binder.java:1021)
08-23 17:30:21.292  1314  4528 D ActivityTaskManager: 	at android.os.Binder.execTransact(Binder.java:994)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

在ActivityStack.createTaskRecord方法里面,调用addTask将TaskRecord和ActivityStack关联起来

    TaskRecord createTaskRecord(int taskId, ActivityInfo info, Intent intent,
            IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor,
            boolean toTop, ActivityRecord activity, ActivityRecord source,
            ActivityOptions options) {
        final TaskRecord task = TaskRecord.create(
                mService, taskId, info, intent, voiceSession, voiceInteractor);
        // add the task to stack first, mTaskPositioner might need the stack association
        addTask(task, toTop, "createTaskRecord");
        final int displayId = mDisplayId != INVALID_DISPLAY ? mDisplayId : DEFAULT_DISPLAY;
        final boolean isLockscreenShown = mService.mStackSupervisor.getKeyguardController()
                .isKeyguardOrAodShowing(displayId);
        if (!mStackSupervisor.getLaunchParamsController()
                .layoutTask(task, info.windowLayout, activity, source, options)
                && !matchParentBounds() && task.isResizeable() && !isLockscreenShown) {
            task.updateOverrideConfiguration(getRequestedOverrideBounds());
        }
        task.createTask(toTop, (info.flags & FLAG_SHOW_FOR_ALL_USERS) != 0);
        return task;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

在创建TaskRecord之后,调用addOrReparentStartingActivity方法来设置ActivityRecord和TaskRecord在关联关系

08-23 17:30:21.296  1314  4528 D ActivityTaskManager: addOrReparentStartingActivity
08-23 17:30:21.296  1314  4528 D ActivityTaskManager: java.lang.Throwable
08-23 17:30:21.296  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.addOrReparentStartingActivity(ActivityStarter.java:2574)
08-23 17:30:21.296  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.setTaskFromReuseOrCreateNewTask(ActivityStarter.java:2335)
08-23 17:30:21.296  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.startActivityUnchecked(ActivityStarter.java:1688)
08-23 17:30:21.296  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.startActivity(ActivityStarter.java:1404)
08-23 17:30:21.296  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.startActivity(ActivityStarter.java:935)
08-23 17:30:21.296  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.startActivity(ActivityStarter.java:585)
08-23 17:30:21.296  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.startActivityMayWait(ActivityStarter.java:1298)
08-23 17:30:21.296  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:516)
08-23 17:30:21.296  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1061)
08-23 17:30:21.296  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1035)
08-23 17:30:21.296  1314  4528 D ActivityTaskManager: 	at com.android.server.wm.ActivityTaskManagerService.startActivity(ActivityTaskManagerService.java:1012)
08-23 17:30:21.296  1314  4528 D ActivityTaskManager: 	at android.app.IActivityTaskManager$Stub.onTransact(IActivityTaskManager.java:1486)
08-23 17:30:21.296  1314  4528 D ActivityTaskManager: 	at android.os.Binder.execTransactInternal(Binder.java:1021)
08-23 17:30:21.296  1314  4528 D ActivityTaskManager: 	at android.os.Binder.execTransact(Binder.java:994)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

addOrReparentStartingActivity方法实现如下:

private void addOrReparentStartingActivity(TaskRecord parent, String reason) {
        Slog.d(TAG,"addOrReparentStartingActivity",new Throwable());
        if (mStartActivity.getTaskRecord() == null || mStartActivity.getTaskRecord() == parent) {
            parent.addActivityToTop(mStartActivity);
        } else {
            mStartActivity.reparent(parent, parent.mActivities.size() /* top */, reason);
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
2.4、Activity生命周期变化

Home应用状态从RESUMED到PAUSING

08-23 17:30:21.306  1314  4528 D ActivityTaskManager: pauseBackStacks: stack=ActivityStack{1502de5 stackId=0 type=home mode=fullscreen visible=true translucent=false, 1 tasks} mResumedActivity=ActivityRecord{3e98fcb u0 com.android.launcher3/.Launcher t83}
08-23 17:30:21.306  1314  4528 V ActivityTaskManager: Moving to PAUSING: ActivityRecord{3e98fcb u0 com.android.launcher3/.Launcher t83}
08-23 17:30:21.306  1314  4528 V ActivityTaskManager: State movement: ActivityRecord{3e98fcb u0 com.android.launcher3/.Launcher t83} from:RESUMED to:PAUSING reason:startPausingLocked
08-23 17:30:21.306  1314  4528 V ActivityTaskManager: java.lang.Throwable
08-23 17:30:21.306  1314  4528 V ActivityTaskManager: 	at com.android.server.wm.ActivityRecord.setState(ActivityRecord.java:1857)
08-23 17:30:21.306  1314  4528 V ActivityTaskManager: 	at com.android.server.wm.ActivityStack.startPausingLocked(ActivityStack.java:1690)
08-23 17:30:21.306  1314  4528 V ActivityTaskManager: 	at com.android.server.wm.ActivityDisplay.pauseBackStacks(ActivityDisplay.java:590)
08-23 17:30:21.306  1314  4528 V ActivityTaskManager: 	at com.android.server.wm.ActivityStack.resumeTopActivityInnerLocked(ActivityStack.java:2747)
08-23 17:30:21.306  1314  4528 V ActivityTaskManager: 	at com.android.server.wm.ActivityStack.resumeTopActivityUncheckedLocked(ActivityStack.java:2578)
08-23 17:30:21.306  1314  4528 V ActivityTaskManager: 	at com.android.server.wm.RootActivityContainer.resumeFocusedStacksTopActivities(RootActivityContainer.java:1159)
08-23 17:30:21.306  1314  4528 V ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.startActivityUnchecked(ActivityStarter.java:1746)
08-23 17:30:21.306  1314  4528 V ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.startActivity(ActivityStarter.java:1404)
08-23 17:30:21.306  1314  4528 V ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.startActivity(ActivityStarter.java:935)
08-23 17:30:21.306  1314  4528 V ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.startActivity(ActivityStarter.java:585)
08-23 17:30:21.306  1314  4528 V ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.startActivityMayWait(ActivityStarter.java:1298)
08-23 17:30:21.306  1314  4528 V ActivityTaskManager: 	at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:516)
08-23 17:30:21.306  1314  4528 V ActivityTaskManager: 	at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1061)
08-23 17:30:21.306  1314  4528 V ActivityTaskManager: 	at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1035)
08-23 17:30:21.306  1314  4528 V ActivityTaskManager: 	at com.android.server.wm.ActivityTaskManagerService.startActivity(ActivityTaskManagerService.java:1012)
08-23 17:30:21.306  1314  4528 V ActivityTaskManager: 	at android.app.IActivityTaskManager$Stub.onTransact(IActivityTaskManager.java:1486)
08-23 17:30:21.306  1314  4528 V ActivityTaskManager: 	at android.os.Binder.execTransactInternal(Binder.java:1021)
08-23 17:30:21.306  1314  4528 V ActivityTaskManager: 	at android.os.Binder.execTransact(Binder.java:994)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

在startPausingLocked方法里面,会调用到PauseActivityItem

mService.getLifecycleManager().scheduleTransaction(prev.app.getThread(),
                        prev.appToken, PauseActivityItem.obtain(prev.finishing, userLeaving,
                                prev.configChangeFlags, pauseImmediately));
  • 1
  • 2
  • 3

然后会调用到Activity.onPause方法,打印Activity: onPause

08-22 18:41:32.897  2055  2055 V Activity: onPause com.android.launcher3.Launcher@cfe111f
08-22 18:41:32.898  2055  2055 D ActivityThread: setState newLifecycleState = 4
08-22 18:41:32.898  2055  2055 D ActivityThread: java.lang.Throwable
08-22 18:41:32.898  2055  2055 D ActivityThread: 	at android.app.ActivityThread$ActivityClientRecord.setState(ActivityThread.java:586)
08-22 18:41:32.898  2055  2055 D ActivityThread: 	at android.app.ActivityThread.performPauseActivityIfNeeded(ActivityThread.java:4507)
08-22 18:41:32.898  2055  2055 D ActivityThread: 	at android.app.ActivityThread.performPauseActivity(ActivityThread.java:4455)
08-22 18:41:32.898  2055  2055 D ActivityThread: 	at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:4407)
08-22 18:41:32.898  2055  2055 D ActivityThread: 	at android.app.servertransaction.PauseActivityItem.execute(PauseActivityItem.java:46)
08-22 18:41:32.898  2055  2055 D ActivityThread: 	at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
08-22 18:41:32.898  2055  2055 D ActivityThread: 	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
08-22 18:41:32.898  2055  2055 D ActivityThread: 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2017)
08-22 18:41:32.898  2055  2055 D ActivityThread: 	at android.os.Handler.dispatchMessage(Handler.java:107)
08-22 18:41:32.898  2055  2055 D ActivityThread: 	at android.os.Looper.loop(Looper.java:214)
08-22 18:41:32.898  2055  2055 D ActivityThread: 	at android.app.ActivityThread.main(ActivityThread.java:7357)
08-22 18:41:32.898  2055  2055 D ActivityThread: 	at java.lang.reflect.Method.invoke(Native Method)
08-22 18:41:32.898  2055  2055 D ActivityThread: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
08-22 18:41:32.898  2055  2055 D ActivityThread: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

Home应用状态从PAUSING到PAUSED

08-23 17:30:21.323  1314  1443 V ActivityTaskManager: Moving to PAUSED: ActivityRecord{3e98fcb u0 com.android.launcher3/.Launcher t83} (pause complete)
08-23 17:30:21.324  1314  1443 V ActivityTaskManager: State movement: ActivityRecord{3e98fcb u0 com.android.launcher3/.Launcher t83} from:PAUSING to:PAUSED reason:completePausedLocked
08-23 17:30:21.324  1314  1443 V ActivityTaskManager: java.lang.Throwable
08-23 17:30:21.324  1314  1443 V ActivityTaskManager: 	at com.android.server.wm.ActivityRecord.setState(ActivityRecord.java:1857)
08-23 17:30:21.324  1314  1443 V ActivityTaskManager: 	at com.android.server.wm.ActivityStack.completePauseLocked(ActivityStack.java:1801)
08-23 17:30:21.324  1314  1443 V ActivityTaskManager: 	at com.android.server.wm.ActivityStack.activityPausedLocked(ActivityStack.java:1770)
08-23 17:30:21.324  1314  1443 V ActivityTaskManager: 	at com.android.server.wm.ActivityTaskManagerService.activityPaused(ActivityTaskManagerService.java:1714)
08-23 17:30:21.324  1314  1443 V ActivityTaskManager: 	at android.app.IActivityTaskManager$Stub.onTransact(IActivityTaskManager.java:1981)
08-23 17:30:21.324  1314  1443 V ActivityTaskManager: 	at android.os.Binder.execTransactInternal(Binder.java:1021)
08-23 17:30:21.324  1314  1443 V ActivityTaskManager: 	at android.os.Binder.execTransact(Binder.java:994)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

注意:之前的这些流程都是运行在system_server里面,此时DeskClock应用进程还没有创建

Deskclock应用进程创建,pid是4887

08-23 17:30:21.356   642   642 D Zygote  : Forked child process 4887
08-23 17:30:21.359  1314  1362 I ActivityManager: Start proc 4887:com.android.deskclock/u0a93 for activity {com.android.deskclock/com.android.deskclock.DeskClock}
  • 1
  • 2

deskclock应用状态从INIT变成RESUMED

08-23 17:30:21.397  1314  1443 V ActivityTaskManager: Moving to RESUMED: ActivityRecord{ed5f802 u0 com.android.deskclock/.DeskClock t87} (starting new instance) callers=com.android.server.wm.ActivityStackSupervisor.realStartActivityLocked:917 com.android.server.wm.RootActivityContainer.attachApplication:784 com.android.server.wm.ActivityTaskManagerService$LocalService.attachApplication:6908 com.android.server.am.ActivityManagerService.attachApplicationLocked:5104 com.android.server.am.ActivityManagerService.attachApplication:5184 
08-23 17:30:21.398  1314  1443 V ActivityTaskManager: State movement: ActivityRecord{ed5f802 u0 com.android.deskclock/.DeskClock t87} from:INITIALIZING to:RESUMED reason:minimalResumeActivityLocked
08-23 17:30:21.398  1314  1443 V ActivityTaskManager: java.lang.Throwable
08-23 17:30:21.398  1314  1443 V ActivityTaskManager: 	at com.android.server.wm.ActivityRecord.setState(ActivityRecord.java:1857)
08-23 17:30:21.398  1314  1443 V ActivityTaskManager: 	at com.android.server.wm.ActivityStack.minimalResumeActivityLocked(ActivityStack.java:1500)
08-23 17:30:21.398  1314  1443 V ActivityTaskManager: 	at com.android.server.wm.ActivityStackSupervisor.realStartActivityLocked(ActivityStackSupervisor.java:917)
08-23 17:30:21.398  1314  1443 V ActivityTaskManager: 	at com.android.server.wm.RootActivityContainer.attachApplication(RootActivityContainer.java:784)
08-23 17:30:21.398  1314  1443 V ActivityTaskManager: 	at com.android.server.wm.ActivityTaskManagerService$LocalService.attachApplication(ActivityTaskManagerService.java:6908)
08-23 17:30:21.398  1314  1443 V ActivityTaskManager: 	at com.android.server.am.ActivityManagerService.attachApplicationLocked(ActivityManagerService.java:5104)
08-23 17:30:21.398  1314  1443 V ActivityTaskManager: 	at com.android.server.am.ActivityManagerService.attachApplication(ActivityManagerService.java:5184)
08-23 17:30:21.398  1314  1443 V ActivityTaskManager: 	at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:2003)
08-23 17:30:21.398  1314  1443 V ActivityTaskManager: 	at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2741)
08-23 17:30:21.398  1314  1443 V ActivityTaskManager: 	at android.os.Binder.execTransactInternal(Binder.java:1021)
08-23 17:30:21.398  1314  1443 V ActivityTaskManager: 	at android.os.Binder.execTransact(Binder.java:994)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在ActivityStackSupervisor.realStartActivityLocked方法里面

boolean realStartActivityLocked(ActivityRecord r, WindowProcessController proc,
            boolean andResume, boolean checkConfig) throws RemoteException {
        try {
		    // 设置Activity和process关系
            r.setProcess(proc);

            try {
                // Create activity launch transaction.
                final ClientTransaction clientTransaction = ClientTransaction.obtain(
                        proc.getThread(), r.appToken);

                final DisplayContent dc = r.getDisplay().mDisplayContent;
				// 初始状态是LaunchActivityItem,在ActivityThread.performLaunchActivity 里面,已经将ActivityRecord的状态设置为r.setState(ON_CREATE);
                clientTransaction.addCallback(LaunchActivityItem.obtain(new Intent(r.intent),
                        System.identityHashCode(r), r.info,
                        // TODO: Have this take the merged configuration instead of separate global
                        // and override configs.
                        mergedConfiguration.getGlobalConfiguration(),
                        mergedConfiguration.getOverrideConfiguration(), r.compat,
                        r.launchedFromPackage, task.voiceInteractor, proc.getReportedProcState(),
                        r.icicle, r.persistentState, results, newIntents,
                        dc.isNextTransitionForward(), proc.createProfilerInfoIfNeeded(),
                                r.assistToken));

                // Set desired final state.
                final ActivityLifecycleItem lifecycleItem;
                if (andResume) {
					// 此处andResume是true,目标状态是ResumeActivityItem
                    lifecycleItem = ResumeActivityItem.obtain(dc.isNextTransitionForward());
                } else {
                    lifecycleItem = PauseActivityItem.obtain();
                }
                clientTransaction.setLifecycleStateRequest(lifecycleItem);

                // Schedule transaction.
                mService.getLifecycleManager().scheduleTransaction(clientTransaction);
			}
		}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

通过LifecycleManager,从ON_CREATE到ON_RESUME,
executeLifecycleState ==> cycleToPath ==> performLifecycleSequence

    private void cycleToPath(ActivityClientRecord r, int finish, boolean excludeLastState,
            ClientTransaction transaction) {
        final int start = r.getLifecycleState(); // 此处是ON_CREATE
        if (DEBUG_RESOLVER) {
            Slog.d(TAG, tId(transaction) + "Cycle activity: "
                    + getShortActivityName(r.token, mTransactionHandler)
                    + " from: " + getStateName(start) + " to: " + getStateName(finish)
                    + " excludeLastState: " + excludeLastState);
        }
        // start是ON_CREATE, finish 是ON_RESUME,在IntArray 里面会依次添加ON_CREATE、ON_START、ON_RESUME
        final IntArray path = mHelper.getLifecyclePath(start, finish, excludeLastState);
        performLifecycleSequence(r, path, transaction);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在cycleToPath里面添加的调用状态,在performLifecycleSequence里面依次执行

    /** Transition the client through previously initialized state sequence. */
    private void performLifecycleSequence(ActivityClientRecord r, IntArray path,
            ClientTransaction transaction) {
        final int size = path.size();
        for (int i = 0, state; i < size; i++) {
            state = path.get(i);
            if (DEBUG_RESOLVER) {
                Slog.d(TAG, tId(transaction) + "Transitioning activity: "
                        + getShortActivityName(r.token, mTransactionHandler)
                        + " to state: " + getStateName(state));
            }
            switch (state) {
                case ON_CREATE:
                    mTransactionHandler.handleLaunchActivity(r, mPendingActions,
                            null /* customIntent */);
                    break;
                case ON_START:
                    mTransactionHandler.handleStartActivity(r, mPendingActions);
                    break;
                case ON_RESUME:
                    mTransactionHandler.handleResumeActivity(r.token, false /* finalStateRequest */,
                            r.isForward, "LIFECYCLER_RESUME_ACTIVITY");
                    break;
           }
 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

对应的log打印:

// 调用Activity的onCreate
08-23 17:30:21.706  4887  4887 V Activity: onCreate com.android.deskclock.DeskClock@5f58495: null
08-23 17:30:22.006  4887  4887 D ActivityThread: setState newLifecycleState = 1
08-23 17:30:22.006  4887  4887 D ActivityThread: java.lang.Throwable
08-23 17:30:22.006  4887  4887 D ActivityThread: 	at android.app.ActivityThread$ActivityClientRecord.setState(ActivityThread.java:586)
08-23 17:30:22.006  4887  4887 D ActivityThread: 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3255)
08-23 17:30:22.006  4887  4887 D ActivityThread: 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3410)
08-23 17:30:22.006  4887  4887 D ActivityThread: 	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
08-23 17:30:22.006  4887  4887 D ActivityThread: 	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
08-23 17:30:22.006  4887  4887 D ActivityThread: 	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
08-23 17:30:22.006  4887  4887 D ActivityThread: 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2017)
08-23 17:30:22.006  4887  4887 D ActivityThread: 	at android.os.Handler.dispatchMessage(Handler.java:107)
08-23 17:30:22.006  4887  4887 D ActivityThread: 	at android.os.Looper.loop(Looper.java:214)
08-23 17:30:22.006  4887  4887 D ActivityThread: 	at android.app.ActivityThread.main(ActivityThread.java:7357)
08-23 17:30:22.006  4887  4887 D ActivityThread: 	at java.lang.reflect.Method.invoke(Native Method)
08-23 17:30:22.006  4887  4887 D ActivityThread: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
08-23 17:30:22.006  4887  4887 D ActivityThread: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
// 调用Activity的onStart
08-23 17:30:22.009  4887  4887 V Activity: onStart com.android.deskclock.DeskClock@5f58495
08-23 17:30:22.016  4887  4887 D ActivityThread: setState newLifecycleState = 2
08-23 17:30:22.016  4887  4887 D ActivityThread: java.lang.Throwable
08-23 17:30:22.016  4887  4887 D ActivityThread: 	at android.app.ActivityThread$ActivityClientRecord.setState(ActivityThread.java:586)
08-23 17:30:22.016  4887  4887 D ActivityThread: 	at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3296)
08-23 17:30:22.016  4887  4887 D ActivityThread: 	at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
08-23 17:30:22.016  4887  4887 D ActivityThread: 	at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
08-23 17:30:22.016  4887  4887 D ActivityThread: 	at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
08-23 17:30:22.016  4887  4887 D ActivityThread: 	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
08-23 17:30:22.016  4887  4887 D ActivityThread: 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2017)
08-23 17:30:22.016  4887  4887 D ActivityThread: 	at android.os.Handler.dispatchMessage(Handler.java:107)
08-23 17:30:22.016  4887  4887 D ActivityThread: 	at android.os.Looper.loop(Looper.java:214)
08-23 17:30:22.016  4887  4887 D ActivityThread: 	at android.app.ActivityThread.main(ActivityThread.java:7357)
08-23 17:30:22.016  4887  4887 D ActivityThread: 	at java.lang.reflect.Method.invoke(Native Method)
08-23 17:30:22.016  4887  4887 D ActivityThread: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
08-23 17:30:22.016  4887  4887 D ActivityThread: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
// 调用Activity的onResume
08-23 17:30:22.016  4887  4887 V Activity: onResume com.android.deskclock.DeskClock@5f58495
08-23 17:30:22.035  4887  4887 D ActivityThread: setState newLifecycleState = 3
08-23 17:30:22.035  4887  4887 D ActivityThread: java.lang.Throwable
08-23 17:30:22.035  4887  4887 D ActivityThread: 	at android.app.ActivityThread$ActivityClientRecord.setState(ActivityThread.java:586)
08-23 17:30:22.035  4887  4887 D ActivityThread: 	at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4200)
08-23 17:30:22.035  4887  4887 D ActivityThread: 	at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4238)
08-23 17:30:22.035  4887  4887 D ActivityThread: 	at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52)
08-23 17:30:22.035  4887  4887 D ActivityThread: 	at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
08-23 17:30:22.035  4887  4887 D ActivityThread: 	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
08-23 17:30:22.035  4887  4887 D ActivityThread: 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2017)
08-23 17:30:22.035  4887  4887 D ActivityThread: 	at android.os.Handler.dispatchMessage(Handler.java:107)
08-23 17:30:22.035  4887  4887 D ActivityThread: 	at android.os.Looper.loop(Looper.java:214)
08-23 17:30:22.035  4887  4887 D ActivityThread: 	at android.app.ActivityThread.main(ActivityThread.java:7357)
08-23 17:30:22.035  4887  4887 D ActivityThread: 	at java.lang.reflect.Method.invoke(Native Method)
08-23 17:30:22.035  4887  4887 D ActivityThread: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
08-23 17:30:22.035  4887  4887 D ActivityThread: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

Home 状态从PAUSED到STOPPING

08-23 17:30:22.955  1314  1443 V ActivityTaskManager: State movement: ActivityRecord{3e98fcb u0 com.android.launcher3/.Launcher t83} from:PAUSED to:STOPPING reason:stopActivityLocked
08-23 17:30:22.955  1314  1443 V ActivityTaskManager: java.lang.Throwable
08-23 17:30:22.955  1314  1443 V ActivityTaskManager: 	at com.android.server.wm.ActivityRecord.setState(ActivityRecord.java:1857)
08-23 17:30:22.955  1314  1443 V ActivityTaskManager: 	at com.android.server.wm.ActivityStack.stopActivityLocked(ActivityStack.java:3776)
08-23 17:30:22.955  1314  1443 V ActivityTaskManager: 	at com.android.server.wm.ActivityStackSupervisor.activityIdleInternalLocked(ActivityStackSupervisor.java:1357)
08-23 17:30:22.955  1314  1443 V ActivityTaskManager: 	at com.android.server.wm.ActivityTaskManagerService.activityIdle(ActivityTaskManagerService.java:1675)
08-23 17:30:22.955  1314  1443 V ActivityTaskManager: 	at android.app.IActivityTaskManager$Stub.onTransact(IActivityTaskManager.java:1957)
08-23 17:30:22.955  1314  1443 V ActivityTaskManager: 	at android.os.Binder.execTransactInternal(Binder.java:1021)
08-23 17:30:22.955  1314  1443 V ActivityTaskManager: 	at android.os.Binder.execTransact(Binder.java:994)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

Home状态变成onStop,在ActivityStack.stopActivityLocked方法里面,会调用StopActivityItem来执行Activity的onStop方法

 mService.getLifecycleManager().scheduleTransaction(r.app.getThread(), r.appToken,
        StopActivityItem.obtain(r.visible, r.configChangeFlags));
  • 1
  • 2

对应的Log打印:

08-23 17:30:22.957  2055  2055 V Activity: onStop com.android.launcher3.Launcher@cfe111f
08-23 17:30:22.958  1314  1355 D ActivityManager: Proc state change of com.android.launcher3 to BFGS (6): service
08-23 17:30:22.958  2055  2055 V Activity: onTrimMemory com.android.launcher3.Launcher@cfe111f: 20
08-23 17:30:22.959  2055  2055 D ActivityThread: setState newLifecycleState = 5
08-23 17:30:22.959  2055  2055 D ActivityThread: java.lang.Throwable
08-23 17:30:22.959  2055  2055 D ActivityThread: 	at android.app.ActivityThread$ActivityClientRecord.setState(ActivityThread.java:586)
08-23 17:30:22.959  2055  2055 D ActivityThread: 	at android.app.ActivityThread.callActivityOnStop(ActivityThread.java:4628)
08-23 17:30:22.959  2055  2055 D ActivityThread: 	at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:4595)
08-23 17:30:22.959  2055  2055 D ActivityThread: 	at android.app.ActivityThread.handleStopActivity(ActivityThread.java:4670)
08-23 17:30:22.959  2055  2055 D ActivityThread: 	at android.app.servertransaction.StopActivityItem.execute(StopActivityItem.java:41)
08-23 17:30:22.959  2055  2055 D ActivityThread: 	at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
08-23 17:30:22.959  2055  2055 D ActivityThread: 	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
08-23 17:30:22.959  2055  2055 D ActivityThread: 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2017)
08-23 17:30:22.959  2055  2055 D ActivityThread: 	at android.os.Handler.dispatchMessage(Handler.java:107)
08-23 17:30:22.959  2055  2055 D ActivityThread: 	at android.os.Looper.loop(Looper.java:214)
08-23 17:30:22.959  2055  2055 D ActivityThread: 	at android.app.ActivityThread.main(ActivityThread.java:7357)
08-23 17:30:22.959  2055  2055 D ActivityThread: 	at java.lang.reflect.Method.invoke(Native Method)
08-23 17:30:22.959  2055  2055 D ActivityThread: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
08-23 17:30:22.959  2055  2055 D ActivityThread: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

Home的ActivityRecord状态变成STOPPED

08-23 17:30:22.980  1314  2324 V ActivityTaskManager: State movement: ActivityRecord{3e98fcb u0 com.android.launcher3/.Launcher t83} from:STOPPING to:STOPPED reason:activityStoppedLocked
08-23 17:30:22.980  1314  2324 V ActivityTaskManager: java.lang.Throwable
08-23 17:30:22.980  1314  2324 V ActivityTaskManager: 	at com.android.server.wm.ActivityRecord.setState(ActivityRecord.java:1857)
08-23 17:30:22.980  1314  2324 V ActivityTaskManager: 	at com.android.server.wm.ActivityRecord.activityStoppedLocked(ActivityRecord.java:2278)
08-23 17:30:22.980  1314  2324 V ActivityTaskManager: 	at com.android.server.wm.ActivityTaskManagerService.activityStopped(ActivityTaskManagerService.java:1745)
08-23 17:30:22.980  1314  2324 V ActivityTaskManager: 	at android.app.IActivityTaskManager$Stub.onTransact(IActivityTaskManager.java:2011)
08-23 17:30:22.980  1314  2324 V ActivityTaskManager: 	at android.os.Binder.execTransactInternal(Binder.java:1021)
08-23 17:30:22.980  1314  2324 V ActivityTaskManager: 	at android.os.Binder.execTransact(Binder.java:994)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

重点说明:

1.在整个Log过程,涉及到3个应用进程,home/system_server/deskclock
2.Activity生命周期的打印是在应用进程里面,ActivityRecord的状态变化是在system_server进程里面
3.Activity和ActivityRecord的状态变化是穿插的

Activity的角度看整个生命周期变化如下:

08-23 17:30:21.322  2055  2055 V Activity: onPause com.android.launcher3.Launcher@cfe111f
08-23 17:30:21.706  4887  4887 V Activity: onCreate com.android.deskclock.DeskClock@5f58495: null
08-23 17:30:22.009  4887  4887 V Activity: onStart com.android.deskclock.DeskClock@5f58495
08-23 17:30:22.016  4887  4887 V Activity: onResume com.android.deskclock.DeskClock@5f58495
08-23 17:30:22.957  2055  2055 V Activity: onStop com.android.launcher3.Launcher@cfe111f
  • 1
  • 2
  • 3
  • 4
  • 5

从ActivityRecord的角度看整个状态变化如下:

08-23 17:30:21.261  1314  4528 V ActivityTaskManager: State movement: ActivityRecord{ed5f802 u0 com.android.deskclock/.DeskClock t-1} from:null to:INITIALIZING reason:ActivityRecord ctor
08-23 17:30:21.306  1314  4528 V ActivityTaskManager: State movement: ActivityRecord{3e98fcb u0 com.android.launcher3/.Launcher t83} from:RESUMED to:PAUSING reason:startPausingLocked
08-23 17:30:21.324  1314  1443 V ActivityTaskManager: State movement: ActivityRecord{3e98fcb u0 com.android.launcher3/.Launcher t83} from:PAUSING to:PAUSED reason:completePausedLocked
08-23 17:30:21.398  1314  1443 V ActivityTaskManager: State movement: ActivityRecord{ed5f802 u0 com.android.deskclock/.DeskClock t87} from:INITIALIZING to:RESUMED reason:minimalResumeActivityLocked
08-23 17:30:22.955  1314  1443 V ActivityTaskManager: State movement: ActivityRecord{3e98fcb u0 com.android.launcher3/.Launcher t83} from:PAUSED to:STOPPING reason:stopActivityLocked
08-23 17:30:22.980  1314  2324 V ActivityTaskManager: State movement: ActivityRecord{3e98fcb u0 com.android.launcher3/.Launcher t83} from:STOPPING to:STOPPED reason:activityStoppedLocked
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

二者之前状态穿插变化

08-23 17:30:21.261  1314  4528 V ActivityTaskManager: State movement: ActivityRecord{ed5f802 u0 com.android.deskclock/.DeskClock t-1} from:null to:INITIALIZING reason:ActivityRecord ctor
08-23 17:30:21.306  1314  4528 V ActivityTaskManager: State movement: ActivityRecord{3e98fcb u0 com.android.launcher3/.Launcher t83} from:RESUMED to:PAUSING reason:startPausingLocked
08-23 17:30:21.322  2055  2055 V Activity: onPause com.android.launcher3.Launcher@cfe111f
08-23 17:30:21.324  1314  1443 V ActivityTaskManager: State movement: ActivityRecord{3e98fcb u0 com.android.launcher3/.Launcher t83} from:PAUSING to:PAUSED reason:completePausedLocked
08-23 17:30:21.398  1314  1443 V ActivityTaskManager: State movement: ActivityRecord{ed5f802 u0 com.android.deskclock/.DeskClock t87} from:INITIALIZING to:RESUMED reason:minimalResumeActivityLocked
08-23 17:30:21.706  4887  4887 V Activity: onCreate com.android.deskclock.DeskClock@5f58495: null
08-23 17:30:22.009  4887  4887 V Activity: onStart com.android.deskclock.DeskClock@5f58495
08-23 17:30:22.016  4887  4887 V Activity: onResume com.android.deskclock.DeskClock@5f58495
08-23 17:30:22.955  1314  1443 V ActivityTaskManager: State movement: ActivityRecord{3e98fcb u0 com.android.launcher3/.Launcher t83} from:PAUSED to:STOPPING reason:stopActivityLocked
08-23 17:30:22.957  2055  2055 V Activity: onStop com.android.launcher3.Launcher@cfe111f
08-23 17:30:22.980  1314  2324 V ActivityTaskManager: State movement: ActivityRecord{3e98fcb u0 com.android.launcher3/.Launcher t83} from:STOPPING to:STOPPED reason:activityStoppedLocked
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/250887
推荐阅读
相关标签
  

闽ICP备14008679号