diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java index 44d7948b12b62..32b722126b8d8 100644 --- a/services/core/java/com/android/server/wm/AppWindowToken.java +++ b/services/core/java/com/android/server/wm/AppWindowToken.java @@ -645,8 +645,7 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree boolean destroyedSomething = false; // Copying to a different list as multiple children can be removed. - // TODO: Not sure why this is needed. - final LinkedList children = new LinkedList<>(mChildren); + final ArrayList children = new ArrayList<>(mChildren); for (int i = children.size() - 1; i >= 0; i--) { final WindowState win = children.get(i); destroyedSomething |= win.destroySurface(cleanupOnResume, mAppStopped); diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 0e025dc8a96db..f541752aee6ed 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -2642,8 +2642,11 @@ class WindowState extends WindowContainer implements WindowManagerP boolean destroySurface(boolean cleanupOnResume, boolean appStopped) { boolean destroyedSomething = false; - for (int i = mChildren.size() - 1; i >= 0; --i) { - final WindowState c = mChildren.get(i); + + // Copying to a different list as multiple children can be removed. + final ArrayList childWindows = new ArrayList<>(mChildren); + for (int i = childWindows.size() - 1; i >= 0; --i) { + final WindowState c = childWindows.get(i); destroyedSomething |= c.destroySurface(cleanupOnResume, appStopped); } @@ -3873,8 +3876,7 @@ class WindowState extends WindowContainer implements WindowManagerP if (!mChildren.isEmpty()) { // Copying to a different list as multiple children can be removed. - // TODO: Not sure if we really need to copy this into a different list. - final LinkedList childWindows = new LinkedList(mChildren); + final ArrayList childWindows = new ArrayList<>(mChildren); for (int i = childWindows.size() - 1; i >= 0; i--) { childWindows.get(i).onExitAnimationDone(); }