summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Filip Gruszczynski <gruszczy@google.com> 2015-12-10 10:41:39 -0800
committer Filip Gruszczynski <gruszczy@google.com> 2015-12-10 10:41:39 -0800
commit3d82ed6be671da98aaf3016d99f57aba56daa97c (patch)
tree56a67d8ebf0e24354c000503aaa8a3177691b29b
parentd7963806f15a1435d3e6c8023cd55b5a84340e77 (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
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java46
-rw-r--r--services/core/java/com/android/server/am/ActivityStack.java13
-rw-r--r--services/core/java/com/android/server/am/ActivityStackSupervisor.java11
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);