OSDN Git Service

Clear pending activity launches when force stop package
authorliulvping <liulvping@xiaomi.com>
Mon, 26 Sep 2016 12:00:15 +0000 (20:00 +0800)
committerWale Ogunwale <ogunwale@google.com>
Thu, 29 Sep 2016 16:42:16 +0000 (16:42 +0000)
https://code.google.com/p/android/issues/detail?id=223731

It is possible that an activity in pending launches be resumed while
it's package was stopped by some other reason, like uninstall pkg.

Merged-In: I130ded89cee162aa59ac2bf330f026e49e16ef69
Change-Id: I130ded89cee162aa59ac2bf330f026e49e16ef69
Signed-off-by: liulvping <liulvping@xiaomi.com>
services/core/java/com/android/server/am/ActivityManagerService.java
services/core/java/com/android/server/am/ActivityStarter.java

index 74af37f..eb5bf22 100644 (file)
@@ -6098,6 +6098,8 @@ public final class ActivityManagerService extends ActivityManagerNative
                 ProcessList.INVALID_ADJ, callerWillRestart, true, doit, evenPersistent,
                 packageName == null ? ("stop user " + userId) : ("stop " + packageName));
 
+        didSomething |= mActivityStarter.clearPendingActivityLaunchesLocked(packageName);
+
         if (mStackSupervisor.finishDisabledPackageActivitiesLocked(
                 packageName, null, doit, evenPersistent, userId)) {
             if (!doit) {
index 7b3f65a..85fa139 100644 (file)
@@ -2006,4 +2006,18 @@ class ActivityStarter {
             }
         }
     }
+
+    boolean clearPendingActivityLaunchesLocked(String packageName) {
+        boolean didSomething = false;
+
+        for (int palNdx = mPendingActivityLaunches.size() - 1; palNdx >= 0; --palNdx) {
+            PendingActivityLaunch pal = mPendingActivityLaunches.get(palNdx);
+            ActivityRecord r = pal.r;
+            if (r != null && r.packageName.equals(packageName)) {
+                mPendingActivityLaunches.remove(palNdx);
+                didSomething = true;
+            }
+        }
+        return didSomething;
+    }
 }