赞
踩
为了方便跟踪启动过程中的相关流程,打开了如下开关以及添加了如下Log,
其中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()方法,可以打印当前方法的整个调用链
把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;
/在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());
}
从桌面点击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");
}
由于是首次启动应用,没有可以复用的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
创建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);
}
}
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。