OSDN Git Service

Just return the task to the pool if it is not in the current stack.
authorWinson <winsonc@google.com>
Fri, 4 Mar 2016 19:21:09 +0000 (11:21 -0800)
committerWinson <winsonc@google.com>
Sat, 5 Mar 2016 00:55:49 +0000 (16:55 -0800)
Bug: 27467025
Change-Id: I5c414d674fb0db152b77c2025b4885d340e81880

packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java

index 0a50f2f..6abb826 100644 (file)
@@ -523,15 +523,22 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
         for (int i = taskViewCount - 1; i >= 0; i--) {
             TaskView tv = taskViews.get(i);
             Task task = tv.getTask();
-            int taskIndex = mStack.indexOfStackTask(task);
-            TaskViewTransform transform = mCurrentTaskTransforms.get(taskIndex);
 
             // Skip ignored tasks
             if (ignoreTasksSet.contains(task.key)) {
                 continue;
             }
 
-            if (task.isFreeformTask() || transform.visible) {
+            // It is possible for the set of lingering TaskViews to differ from the stack if the
+            // stack was updated before the relayout.  If the task view is no longer in the stack,
+            // then just return it back to the view pool.
+            int taskIndex = mStack.indexOfStackTask(task);
+            TaskViewTransform transform = null;
+            if (taskIndex != -1) {
+                transform = mCurrentTaskTransforms.get(taskIndex);
+            }
+
+            if (task.isFreeformTask() || (transform != null && transform.visible)) {
                 mTmpTaskViewMap.put(task.key, tv);
             } else {
                 if (mTouchExplorationEnabled) {