Clean up activities and displays when done
More maintenance fixes.
Fix bug 13157352.
Change-Id: Ic86d39a84452a1cf1dc1762cec517b419ad0a852
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index 3587241..ad6ff0e 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -2179,13 +2179,28 @@
ActivityRecord top = stack.topRunningNonDelayedActivityLocked(null);
if (top != null) {
// TODO: Make sure the next activity doesn't start up when top is destroyed.
- stack.destroyActivityLocked(top, true, true, "stack removal");
+ stack.destroyActivityLocked(top, true, true, "stack parent destroyed");
}
mActivityContainers.removeAt(ndx);
container.detachLocked();
}
}
+ void deleteActivityContainer(IActivityContainer container) {
+ ActivityContainer activityContainer = (ActivityContainer)container;
+ if (activityContainer != null) {
+ activityContainer.mStack.destroyActivitiesLocked(null, true,
+ "deleteActivityContainer");
+ final ActivityRecord parent = activityContainer.mParentActivity;
+ if (parent != null) {
+ parent.mChildContainers.remove(activityContainer);
+ }
+ final int stackId = activityContainer.mStackId;
+ mActivityContainers.remove(stackId);
+ mWindowManager.removeStack(stackId);
+ }
+ }
+
private int createStackOnDisplay(ActivityRecord parentActivity, int stackId, int displayId) {
ActivityDisplay activityDisplay = mActivityDisplays.get(displayId);
if (activityDisplay == null) {
@@ -2556,6 +2571,7 @@
pw.print(prefix); pw.println("mSleepTimeout=" + mSleepTimeout);
pw.print(prefix); pw.println("mCurTaskId=" + mCurTaskId);
pw.print(prefix); pw.println("mUserStackInFront=" + mUserStackInFront);
+ pw.print(prefix); pw.println("mActivityContainers=" + mActivityContainers);
}
ArrayList<ActivityRecord> getDumpActivitiesLocked(String name) {