diff options
| author | 2015-12-10 10:41:39 -0800 | |
|---|---|---|
| committer | 2015-12-10 10:41:39 -0800 | |
| commit | 3d82ed6be671da98aaf3016d99f57aba56daa97c (patch) | |
| tree | 56a67d8ebf0e24354c000503aaa8a3177691b29b | |
| parent | d7963806f15a1435d3e6c8023cd55b5a84340e77 (diff) | |
Fix activity not launching from recents after it was dismissed.
When activity was launched from recents and started at the same time, we
would first try resuming activities and then focus on the started
activity. That is wrong odering, as the previously focused activity will
be resumed (in this case recents). We need to first focus on the start
activity and then request resuming.
The CL also flag protects some logging that is being very frequently
printed from activity manager.
Bug: 25823213
Change-Id: I5311fb2bf316ce3d298b30fa90fb257978bacdca
3 files changed, 36 insertions, 34 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index e4a6f3c7c96d..26ece5474f25 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -3484,27 +3484,29 @@ public final class ActivityManagerService extends ActivityManagerNative Watchdog.getInstance().processStarted(app.processName, startResult.pid); } - checkTime(startTime, "startProcess: building log message"); - StringBuilder buf = mStringBuilder; - buf.setLength(0); - buf.append("Start proc "); - buf.append(startResult.pid); - buf.append(':'); - buf.append(app.processName); - buf.append('/'); - UserHandle.formatUid(buf, uid); - if (!isActivityProcess) { - buf.append(" ["); - buf.append(entryPoint); - buf.append("]"); - } - buf.append(" for "); - buf.append(hostingType); - if (hostingNameStr != null) { - buf.append(" "); - buf.append(hostingNameStr); - } - Slog.i(TAG, buf.toString()); + if (DEBUG_PROCESSES) { + checkTime(startTime, "startProcess: building log message"); + StringBuilder buf = mStringBuilder; + buf.setLength(0); + buf.append("Start proc "); + buf.append(startResult.pid); + buf.append(':'); + buf.append(app.processName); + buf.append('/'); + UserHandle.formatUid(buf, uid); + if (!isActivityProcess) { + buf.append(" ["); + buf.append(entryPoint); + buf.append("]"); + } + buf.append(" for "); + buf.append(hostingType); + if (hostingNameStr != null) { + buf.append(" "); + buf.append(hostingNameStr); + } + Slog.i(TAG, buf.toString()); + } app.setPid(startResult.pid); app.usingWrapper = startResult.usingWrapper; app.removed = false; @@ -19748,7 +19750,7 @@ public final class ActivityManagerService extends ActivityManagerNative } else { numEmpty++; if (numEmpty > emptyProcessLimit) { - app.kill("empty #" + numEmpty, true); + app.kill("empty #" + numEmpty, DEBUG_PROCESSES); } } break; diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index b052d17a8dcb..9e32efa1a1c2 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -74,6 +74,7 @@ import android.os.Trace; import android.os.UserHandle; import android.service.voice.IVoiceInteractionSession; import android.util.EventLog; +import android.util.Log; import android.util.Slog; import android.view.Display; @@ -733,7 +734,7 @@ final class ActivityStack { "Launch completed; removing icicle of " + r.icicle); } - private void addRecentActivityLocked(ActivityRecord r) { + void addRecentActivityLocked(ActivityRecord r) { if (r != null) { mRecentTasks.addLocked(r.task); r.task.touchActiveTime(); @@ -2312,8 +2313,8 @@ final class ActivityStack { updateTaskMovement(task, true); } - final void startActivityLocked(ActivityRecord r, boolean newTask, - boolean doResume, boolean keepCurTransition, ActivityOptions options) { + final void startActivityLocked(ActivityRecord r, boolean newTask, boolean keepCurTransition, + ActivityOptions options) { TaskRecord rTask = r.task; final int taskId = rTask.taskId; // mLaunchTaskBehind tasks get placed at the back of the task stack. @@ -2459,12 +2460,6 @@ final class ActivityStack { if (VALIDATE_TOKENS) { validateAppTokensLocked(); } - - if (doResume) { - mStackSupervisor.resumeTopActivitiesLocked(this, r, options); - } else { - addRecentActivityLocked(r); - } } final void validateAppTokensLocked() { diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index f4ba19f53937..9fff0c81d3ae 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -2628,9 +2628,14 @@ public final class ActivityStackSupervisor implements DisplayListener { } ActivityStack.logStartActivity(EventLogTags.AM_CREATE_ACTIVITY, r, r.task); targetStack.mLastPausedActivity = null; - targetStack.startActivityLocked(r, newTask, doResume, keepCurTransition, options); - if (!launchTaskBehind && doResume) { - mService.setFocusedActivityLocked(r, "startedActivity"); + targetStack.startActivityLocked(r, newTask, keepCurTransition, options); + if (doResume) { + if (!launchTaskBehind) { + mService.setFocusedActivityLocked(r, "startedActivity"); + } + resumeTopActivitiesLocked(targetStack, r, options); + } else { + targetStack.addRecentActivityLocked(r); } updateUserStackLocked(r.userId, targetStack); |