diff options
author | riddle_hsu <riddle_hsu@htc.com> | 2014-07-04 17:01:56 +0800 |
---|---|---|
committer | riddle_hsu <riddle_hsu@htc.com> | 2014-07-04 17:01:56 +0800 |
commit | 3145b2490214a8feaff83950d6b903b2180aa869 (patch) | |
tree | 2f0c4730da616d7e9c80da9e2f9a80989162e8c1 | |
parent | a6e9dd3f9a2d966faf2d1710d2189127b968dc52 (diff) | |
download | base-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-x | services/java/com/android/server/am/ActivityStack.java | 9 |
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) { |