diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 51e7a0181f18c..5b5ea216a0a7d 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -2659,14 +2659,16 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A EventLog.writeEvent(EventLogTags.AM_DESTROY_ACTIVITY, mUserId, System.identityHashCode(this), task.mTaskId, shortComponentName, reason); + final ActivityStack stack = getActivityStack(); + if (hasProcess() && !stack.inLruList(this)) { + Slog.w(TAG, "Activity " + this + " being finished, but not in LRU list"); + } + boolean removedFromHistory = false; cleanUp(false /* cleanServices */, false /* setState */); - final ActivityStack stack = getActivityStack(); - final boolean hadApp = hasProcess(); - - if (hadApp) { + if (hasProcess()) { if (removeFromApp) { app.removeActivity(this); if (!app.hasActivities()) { @@ -2731,10 +2733,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A configChangeFlags = 0; - if (!stack.removeActivityFromLRUList(this) && hadApp) { - Slog.w(TAG, "Activity " + this + " being finished, but not in LRU list"); - } - return removedFromHistory; } diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java index e22a6e234ea09..cc9cd70e042b9 100644 --- a/services/core/java/com/android/server/wm/ActivityStack.java +++ b/services/core/java/com/android/server/wm/ActivityStack.java @@ -297,7 +297,7 @@ class ActivityStack extends TaskStack { * The first entry in the list is the least recently used. * It contains HistoryRecord objects. */ - private final ArrayList mLRUActivities = new ArrayList<>(); + private final ArrayList mLruActivities = new ArrayList<>(); /** * When we are in the process of pausing an activity, before starting the @@ -1060,14 +1060,15 @@ class ActivityStack extends TaskStack { } /** @return {@code true} if LRU list contained the specified activity. */ - final boolean removeActivityFromLRUList(ActivityRecord activity) { - return mLRUActivities.remove(activity); + final boolean inLruList(ActivityRecord activity) { + return mLruActivities.contains(activity); } - final boolean updateLRUListLocked(ActivityRecord r) { - final boolean hadit = mLRUActivities.remove(r); - mLRUActivities.add(r); - return hadit; + /** @return {@code true} if the given activity was contained in LRU list. */ + final boolean updateLruList(ActivityRecord r) { + final boolean contained = mLruActivities.remove(r); + mLruActivities.add(r); + return contained; } final boolean isHomeOrRecentsStack() { @@ -2655,7 +2656,7 @@ class ActivityStack extends TaskStack { next.app.updateProcessInfo(false /* updateServiceConnectionActivities */, true /* activityChange */, true /* updateOomAdj */); - updateLRUListLocked(next); + updateLruList(next); // Have the window manager re-evaluate the orientation of // the screen based on the new activity order. @@ -3645,10 +3646,10 @@ class ActivityStack extends TaskStack { * an activity moves away from the stack. */ void onActivityRemovedFromStack(ActivityRecord r) { - removeActivityFromLRUList(r); removeTimeoutsForActivity(r); mExitingActivities.remove(r); + mLruActivities.remove(r); if (mResumedActivity != null && mResumedActivity == r) { setResumedActivity(null, "onActivityRemovedFromStack"); @@ -3659,9 +3660,12 @@ class ActivityStack extends TaskStack { } void onActivityAddedToStack(ActivityRecord r) { - if(r.getState() == RESUMED) { + if (r.isState(RESUMED)) { setResumedActivity(r, "onActivityAddedToStack"); } + if (r.hasProcess()) { + updateLruList(r); + } } /// HANDLER INTERFACE BEGIN @@ -3819,7 +3823,7 @@ class ActivityStack extends TaskStack { } private boolean removeHistoryRecordsForAppLocked(WindowProcessController app) { - removeHistoryRecordsForAppLocked(mLRUActivities, app, "mLRUActivities"); + removeHistoryRecordsForAppLocked(mLruActivities, app, "mLruActivities"); removeHistoryRecordsForAppLocked(mStackSupervisor.mStoppingActivities, app, "mStoppingActivities"); removeHistoryRecordsForAppLocked(mStackSupervisor.mGoingToSleepActivities, app, @@ -4383,7 +4387,7 @@ class ActivityStack extends TaskStack { boolean printed = dumpActivitiesLocked(fd, pw, dumpAll, dumpClient, dumpPackage, needSep); - printed |= dumpHistoryList(fd, pw, mLRUActivities, " ", "Run", false, + printed |= dumpHistoryList(fd, pw, mLruActivities, " ", "Run", false, !dumpAll, false, dumpPackage, true, " Running activities (most recent first):", null); @@ -4660,7 +4664,7 @@ class ActivityStack extends TaskStack { // Apps may depend on onResume()/onPause() being called in pairs. if (setResume) { r.setState(RESUMED, "moveToFrontAndResumeStateIfNeeded"); - updateLRUListLocked(r); + updateLruList(r); } // If the activity was previously pausing, then ensure we transfer that as well if (setPause) { diff --git a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java index e94ac4cc51e8e..4828a8d864e96 100644 --- a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java @@ -912,7 +912,7 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks { } r.launchFailed = false; - if (stack.updateLRUListLocked(r)) { + if (stack.updateLruList(r)) { Slog.w(TAG, "Activity " + r + " being launched, but already in LRU list"); }