summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorriddle_hsu <riddle_hsu@htc.com>2014-07-04 17:01:56 +0800
committerriddle_hsu <riddle_hsu@htc.com>2014-07-04 17:01:56 +0800
commit3145b2490214a8feaff83950d6b903b2180aa869 (patch)
tree2f0c4730da616d7e9c80da9e2f9a80989162e8c1
parenta6e9dd3f9a2d966faf2d1710d2189127b968dc52 (diff)
downloadbase-3145b2490214a8feaff83950d6b903b2180aa869.tar.gz
[ActivityManager] Avoid keeping restarting home when only home activity exists.
Root Cause: When there is only home activity existed, updating home apk will call forceStopPackageLocked to finish the activity. Then activity history becomes empty, then home will be launched, but its package is still target to close that results a loop. Solution: If home activity has been force-stopped, do not stop the same home activity again. Change-Id: Icff12028d407873c2e6f50a06bcad231b908ccbd
-rwxr-xr-xservices/java/com/android/server/am/ActivityStack.java9
1 files changed, 9 insertions, 0 deletions
diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java
index 4d6727c84f5c..8f777f9cbfad 100755
--- a/services/java/com/android/server/am/ActivityStack.java
+++ b/services/java/com/android/server/am/ActivityStack.java
@@ -3370,6 +3370,7 @@ final class ActivityStack {
boolean forceStopPackageLocked(String name, boolean doit, boolean evenPersistent, int userId) {
boolean didSomething = false;
TaskRecord lastTask = null;
+ ComponentName homeActivity = null;
for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) {
final ArrayList<ActivityRecord> activities = mTaskHistory.get(taskNdx).mActivities;
int numActivities = activities.size();
@@ -3388,6 +3389,14 @@ final class ActivityStack {
}
return true;
}
+ if (r.isHomeActivity()) {
+ if (homeActivity != null && homeActivity.equals(r.realActivity)) {
+ Slog.i(TAG, "Skip force-stop again " + r);
+ continue;
+ } else {
+ homeActivity = r.realActivity;
+ }
+ }
didSomething = true;
Slog.i(TAG, " Force finishing activity " + r);
if (samePackage) {