From b5066fe30790e3e5741ac2e6ef180c79ff8cf048 Mon Sep 17 00:00:00 2001 From: Wale Ogunwale Date: Wed, 21 Sep 2016 07:33:43 -0700 Subject: Save activity state before stopping acitivity when device sleeps Makes it consistent with the regular stop code path and allows for the activity to be relaunched with the right state if a relaunch happens after stop due to sleep. Bug: 30241363 Change-Id: I92edfe6e0e3f5c7ce3b56d49df31e601a798cd4f --- core/java/android/app/ActivityThread.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 18677dda3b88..d9492cbd2911 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -3799,7 +3799,7 @@ public final class ActivityThread { * than our client -- for the server, stop means to save state and give * it the result when it is done, but the window may still be visible. * For the client, we want to call onStop()/onStart() to indicate when - * the activity's UI visibillity changes. + * the activity's UI visibility changes. */ private void performStopActivityInner(ActivityClientRecord r, StopInfo info, boolean keepShown, boolean saveState, String reason) { @@ -3973,6 +3973,9 @@ public final class ActivityThread { mSomeActivitiesChanged = true; } + // TODO: This method should be changed to use {@link #performStopActivityInner} to perform to + // stop operation on the activity to reduce code duplication and the chance of fixing a bug in + // one place and missing the other. private void handleSleeping(IBinder token, boolean sleeping) { ActivityClientRecord r = mActivities.get(token); @@ -3983,6 +3986,10 @@ public final class ActivityThread { if (sleeping) { if (!r.stopped && !r.isPreHoneycomb()) { + if (!r.activity.mFinished && r.state == null) { + callCallActivityOnSaveInstanceState(r); + } + try { // Now we are idle. r.activity.performStop(false /*preserveWindow*/); -- cgit v1.2.3-59-g8ed1b