diff options
-rw-r--r-- | services/core/java/com/android/server/am/ActivityStarter.java | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java index 2e33c6254c11..b9ae4fd4f7b3 100644 --- a/services/core/java/com/android/server/am/ActivityStarter.java +++ b/services/core/java/com/android/server/am/ActivityStarter.java @@ -1561,9 +1561,13 @@ class ActivityStarter { == (FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK)) { // The caller has requested to completely replace any existing task with its new // activity. Well that should not be too hard... - intentActivity.task.performClearTaskLocked(); - intentActivity.task.setIntent(mStartActivity); + // Note: we must persist the {@link TaskRecord} first as intentActivity could be + // removed from calling performClearTaskLocked (For example, if it is being brought out + // of history or if it is finished immediately), thus disassociating the task. mReuseTask = intentActivity.task; + mReuseTask.performClearTaskLocked(); + mReuseTask.setIntent(mStartActivity); + // When we clear the task - focus will be adjusted, which will bring another task // to top before we launch the activity we need. This will temporary swap their // mTaskToReturnTo values and we don't want to overwrite them accidentally. |