为了方便跟踪启动过程中的相关流程,打开了如下开关以及添加了如下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());
小技巧:
在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.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());
在ActivityStack.java里面
ActivityStack(ActivityDisplay display, int stackId, ActivityStackSupervisor supervisor,
int windowingMode, int activityType, boolean onTop) {
Slog.d(TAG,"new ActivityStack stackid = " + stackId,new Throwable());
}
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
对应的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);
}
}
在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);
}
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)
ActivityRecord的构造方法如下
ActivityRecord() {
mAtmService = _service;
mRootActivityContainer = _service.mRootActivityContainer;
appToken = new Token(this, _intent);
setState(INITIALIZING, "ActivityRecord ctor");
}
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)
在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
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)
在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;
}
在创建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)
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);
}
}
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)
在startPausingLocked方法里面,会调用到PauseActivityItem
mService.getLifecycleManager().scheduleTransaction(prev.app.getThread(),
prev.appToken, PauseActivityItem.obtain(prev.finishing, userLeaving,
prev.configChangeFlags, pauseImmediately));
然后会调用到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)
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)
注意:之前的这些流程都是运行在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}
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)
在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);
}
}
}
通过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);
}
在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;
}
}
对应的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)
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)
Home状态变成onStop,在ActivityStack.stopActivityLocked方法里面,会调用StopActivityItem来执行Activity的onStop方法
mService.getLifecycleManager().scheduleTransaction(r.app.getThread(), r.appToken,
StopActivityItem.obtain(r.visible, r.configChangeFlags));
对应的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)
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.在整个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
从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
二者之前状态穿插变化
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