平台
rk3288 + android 5.11
问题
在adb shell中, 连续调用3次kill Launcher后, Launcher无法正常显示.
关键LOG:
01-01 20:14:27.738 W/ActivityManagerService( 475): Force removing ActivityRecord{323bcec9 u0 com.android.launcher3/.Launcher t1}: app died, no saved state
分析:
一个关键的计数: launchCount
|-- frameworks/base/services/core/java/com/android/server/am/ActivityRecord.java
int launchCount; // count of launches since last state
|-- frameworks/base/services/core/java/com/android/server/am/ActivityStack.java
boolean removeHistoryRecordsForAppLocked(ProcessRecord app) { //判断是否已经尝试启动2次以上 } else if (r.launchCount > 2 && r.lastLaunchTime > (SystemClock.uptimeMillis()-60000)) { // We have launched this activity too many times since it was // able to run, so give up and remove it. remove = true; } ... //LOG 输出的地方: Slog.w(TAG, "Force removing " + r + ": app died, no saved state"); EventLog.writeEvent(EventLogTags.AM_FINISH_ACTIVITY, r.userId, System.identityHashCode(r), r.task.taskId, r.shortComponentName, "proc died without state saved"); } final void activityStoppedLocked(ActivityRecord r, Bundle icicle, PersistableBundle persistentState, CharSequence description) { ... //正常退出后清0 r.launchCount = 0; }
|-- frameworks/base/services/core/java/com/android/server/am/ActivityStackSupervisor.java
final boolean realStartActivityLocked(ActivityRecord r, ProcessRecord app, boolean andResume, boolean checkConfig) throws RemoteException { //启动一次自加1 r.launchCount++; }