diff options
author | Craig Mautner <cmautner@google.com> | 2013-06-24 18:38:10 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-06-24 18:38:11 +0000 |
commit | 7a78b39428f86015a1cb1f59d65de455cd52350b (patch) | |
tree | c1b070fe5a67c0880741216e2db8b9c7a7c494f6 /services/java | |
parent | cf165a0ae00b6d4098de912545c1367aecf94c10 (diff) | |
parent | f0ac5c87f2a4a7ee8148a7b8d02b55e439ab130c (diff) | |
download | frameworks_base-7a78b39428f86015a1cb1f59d65de455cd52350b.zip frameworks_base-7a78b39428f86015a1cb1f59d65de455cd52350b.tar.gz frameworks_base-7a78b39428f86015a1cb1f59d65de455cd52350b.tar.bz2 |
Merge "Fix unnecessary and harmful task movement."
Diffstat (limited to 'services/java')
3 files changed, 22 insertions, 11 deletions
diff --git a/services/java/com/android/server/am/ActivityStackSupervisor.java b/services/java/com/android/server/am/ActivityStackSupervisor.java index a4fd7ad..4f30558 100644 --- a/services/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/java/com/android/server/am/ActivityStackSupervisor.java @@ -2170,29 +2170,31 @@ public final class ActivityStackSupervisor { for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) { final ActivityStack stack = mStacks.get(stackNdx); final ActivityRecord r = stack.topRunningActivityLocked(null); + final ActivityState state = r == null ? ActivityState.DESTROYED : r.state; if (isFrontStack(stack)) { if (r == null) { Slog.e(TAG, "validateTop...: null top activity, stack=" + stack); } else { - if (stack.mPausingActivity != null) { + final ActivityRecord pausing = stack.mPausingActivity; + if (pausing != null && pausing == r) { Slog.e(TAG, "validateTop...: top stack has pausing activity r=" + r + - " state=" + r.state); + " state=" + state); } - if (r.state != ActivityState.INITIALIZING && - r.state != ActivityState.RESUMED) { + if (state != ActivityState.INITIALIZING && state != ActivityState.RESUMED) { Slog.e(TAG, "validateTop...: activity in front not resumed r=" + r + - " state=" + r.state); + " state=" + state); } } } else { - if (stack.mResumedActivity != null) { + final ActivityRecord resumed = stack.mResumedActivity; + if (resumed != null && resumed == r) { Slog.e(TAG, "validateTop...: back stack has resumed activity r=" + r + - " state=" + r.state); + " state=" + state); } - if (r != null && (r.state == ActivityState.INITIALIZING - || r.state == ActivityState.RESUMED)) { + if (r != null && (state == ActivityState.INITIALIZING + || state == ActivityState.RESUMED)) { Slog.e(TAG, "validateTop...: activity in back resumed r=" + r + - " state=" + r.state); + " state=" + state); } } } diff --git a/services/java/com/android/server/wm/TaskStack.java b/services/java/com/android/server/wm/TaskStack.java index 827958d..b43a7a1 100644 --- a/services/java/com/android/server/wm/TaskStack.java +++ b/services/java/com/android/server/wm/TaskStack.java @@ -16,7 +16,12 @@ package com.android.server.wm; +import static com.android.server.wm.WindowManagerService.DEBUG_TASK_MOVEMENT; +import static com.android.server.wm.WindowManagerService.TAG; + import android.graphics.Rect; +import android.os.Debug; +import android.util.Slog; import android.util.TypedValue; import static com.android.server.am.ActivityStackSupervisor.HOME_STACK_ID; @@ -88,6 +93,7 @@ public class TaskStack { * @param toTop Whether to add it to the top or bottom. */ boolean addTask(Task task, boolean toTop) { + if (DEBUG_TASK_MOVEMENT) Slog.d(TAG, "addTask: task=" + task + " toTop=" + toTop); mStackBox.makeDirty(); mTasks.add(toTop ? mTasks.size() : 0, task); task.mStack = this; @@ -95,11 +101,14 @@ public class TaskStack { } boolean moveTaskToTop(Task task) { + if (DEBUG_TASK_MOVEMENT) Slog.d(TAG, "moveTaskToTop: task=" + task + " Callers=" + + Debug.getCallers(6)); mTasks.remove(task); return addTask(task, true); } boolean moveTaskToBottom(Task task) { + if (DEBUG_TASK_MOVEMENT) Slog.d(TAG, "moveTaskToBottom: task=" + task); mTasks.remove(task); return addTask(task, false); } @@ -110,6 +119,7 @@ public class TaskStack { * @param task The Task to delete. */ void removeTask(Task task) { + if (DEBUG_TASK_MOVEMENT) Slog.d(TAG, "removeTask: task=" + task); mStackBox.makeDirty(); mTasks.remove(task); } diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index ab0590e..65ca00d 100644 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -3777,7 +3777,6 @@ public class WindowManagerService extends IWindowManager.Stub } changed = mFocusedApp != newFocus; mFocusedApp = newFocus; - moveTaskToTop(newFocus.groupId); if (DEBUG_FOCUS) Slog.v(TAG, "Set focused app to: " + mFocusedApp + " moveFocusNow=" + moveFocusNow); if (changed) { |