diff options
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerService.java | 14 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityStackSupervisor.java | 2 |
2 files changed, 15 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 54c4ced18e47..e8c1a0f0e8b2 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -600,6 +600,8 @@ public final class ActivityManagerService extends ActivityManagerNative final AppErrors mAppErrors; + boolean mDoingSetFocusedActivity; + public boolean canShowErrorDialogs() { return mShowDialogs && !mSleeping && !mShuttingDown; } @@ -2730,6 +2732,12 @@ public final class ActivityManagerService extends ActivityManagerNative } if (DEBUG_FOCUS) Slog.d(TAG_FOCUS, "setFocusedActivityLocked: r=" + r); + + final boolean wasDoingSetFocusedActivity = mDoingSetFocusedActivity; + if (wasDoingSetFocusedActivity) Slog.w(TAG, + "setFocusedActivityLocked: called recursively, r=" + r + ", reason=" + reason); + mDoingSetFocusedActivity = true; + final ActivityRecord last = mFocusedActivity; mFocusedActivity = r; if (r.task.isApplicationTask()) { @@ -2781,6 +2789,12 @@ public final class ActivityManagerService extends ActivityManagerNative mLastFocusedUserId = mFocusedActivity.userId; } + // Log a warning if the focused app is changed during the process. This could + // indicate a problem of the focus setting logic! + if (mFocusedActivity != r) Slog.w(TAG, + "setFocusedActivityLocked: r=" + r + " but focused to " + mFocusedActivity); + mDoingSetFocusedActivity = wasDoingSetFocusedActivity; + EventLogTags.writeAmFocusedActivity( mFocusedActivity == null ? -1 : mFocusedActivity.userId, mFocusedActivity == null ? "NULL" : mFocusedActivity.shortComponentName, diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index 95bc95a8767a..e5ca1bfbaa9f 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -583,7 +583,7 @@ public final class ActivityStackSupervisor implements DisplayListener { } final ActivityRecord r = topRunningActivityLocked(); - if (mService.mFocusedActivity != r) { + if (!mService.mDoingSetFocusedActivity && mService.mFocusedActivity != r) { // The focus activity should always be the top activity in the focused stack. // There will be chaos and anarchy if it isn't... mService.setFocusedActivityLocked(r, reason + " setFocusStack"); |