Change task removal sequence
- Remove task after removing activity. Removing the task before
removing the activity led to problems when the task was still needed.
- In WindowManager wait for activity manager to remove the task.
Previously was automatically removing the task when the last activity
was removed.
Fixes bug 12957434.
Change-Id: I7f6b1f09a2e2a845f177f337769075c9376f8bdb
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index 4047940..9c631c4 100755
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -2697,15 +2697,6 @@
here.fillInStackTrace();
Slog.i(TAG, "Removing activity " + r + " from stack");
}
- final TaskRecord task = r.task;
- if (task != null && task.removeActivity(r)) {
- if (DEBUG_STACK) Slog.i(TAG,
- "removeActivityFromHistoryLocked: last activity removed from " + this);
- if (mStackSupervisor.isFrontStack(this) && task == topTask() && task.mOnTopOfHome) {
- mStackSupervisor.moveHomeToTop();
- }
- removeTask(task);
- }
r.takeFromHistory();
removeTimeoutsForActivityLocked(r);
if (DEBUG_STATES) Slog.v(TAG, "Moving to DESTROYED: " + r + " (removed from history)");
@@ -2716,6 +2707,15 @@
if (VALIDATE_TOKENS) {
validateAppTokensLocked();
}
+ final TaskRecord task = r.task;
+ if (task != null && task.removeActivity(r)) {
+ if (DEBUG_STACK) Slog.i(TAG,
+ "removeActivityFromHistoryLocked: last activity removed from " + this);
+ if (mStackSupervisor.isFrontStack(this) && task == topTask() && task.mOnTopOfHome) {
+ mStackSupervisor.moveHomeToTop();
+ }
+ removeTask(task);
+ }
cleanUpActivityServicesLocked(r);
r.removeUriPermissionsLocked();
}
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index cf249dd..c6976c9 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -4527,8 +4527,8 @@
void removeAppFromTaskLocked(AppWindowToken wtoken) {
final Task task = mTaskIdToTask.get(wtoken.groupId);
- if (!wtoken.mDeferRemoval && task != null && task.removeAppToken(wtoken)) {
- removeTaskLocked(task);
+ if (task != null) {
+ task.removeAppToken(wtoken);
}
}