diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityRecord.java | 13 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityStack.java | 2 |
2 files changed, 9 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 6ac41baefa4a..e08e1ff01348 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -863,7 +863,7 @@ final class ActivityRecord extends ConfigurationContainer { name = intent.getComponent().flattenToShortString(); } - private static ActivityRecord tokenToActivityRecordLocked(Token token) { + private static @Nullable ActivityRecord tokenToActivityRecordLocked(Token token) { if (token == null) { return null; } @@ -891,7 +891,7 @@ final class ActivityRecord extends ConfigurationContainer { } } - static ActivityRecord forTokenLocked(IBinder token) { + static @Nullable ActivityRecord forTokenLocked(IBinder token) { try { return Token.tokenToActivityRecordLocked((Token)token); } catch (ClassCastException e) { @@ -2127,10 +2127,13 @@ final class ActivityRecord extends ConfigurationContainer { static void activityResumedLocked(IBinder token) { final ActivityRecord r = ActivityRecord.forTokenLocked(token); if (DEBUG_SAVED_STATE) Slog.i(TAG_STATES, "Resumed activity; dropping state of: " + r); - if (r != null) { - r.icicle = null; - r.haveState = false; + if (r == null) { + // If an app reports resumed after a long delay, the record on server side might have + // been removed (e.g. destroy timeout), so the token could be null. + return; } + r.icicle = null; + r.haveState = false; final ActivityDisplay display = r.getDisplay(); if (display != null) { diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java index e0890a6fe17f..fad4dbd5613b 100644 --- a/services/core/java/com/android/server/wm/ActivityStack.java +++ b/services/core/java/com/android/server/wm/ActivityStack.java @@ -1804,7 +1804,7 @@ class ActivityStack extends ConfigurationContainer { if (prev.finishing) { if (DEBUG_PAUSE) Slog.v(TAG_PAUSE, "Executing finish of activity: " + prev); prev = finishCurrentActivityLocked(prev, FINISH_AFTER_VISIBLE, false, - "completedPausedLocked"); + "completePausedLocked"); } else if (prev.hasProcess()) { if (DEBUG_PAUSE) Slog.v(TAG_PAUSE, "Enqueue pending stop if needed: " + prev + " wasStopping=" + wasStopping + " visible=" + prev.visible); |