diff options
| author | Wale Ogunwale <ogunwale@google.com> | 2015-09-03 17:06:03 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-09-03 17:06:03 +0000 |
| commit | 512141d581133ad5c1712ac097dcee08d46bae2c (patch) | |
| tree | 683492ee1484f8ac1da3d20cee8558ad0d38dc8f | |
| parent | 60aae166e99dff0dba379e14c0fc43e89fd1a018 (diff) | |
| parent | 2cb2dd40d6a84a3c113c1a858e85ca642d7faf77 (diff) | |
| download | frameworks_base-512141d581133ad5c1712ac097dcee08d46bae2c.zip frameworks_base-512141d581133ad5c1712ac097dcee08d46bae2c.tar.gz frameworks_base-512141d581133ad5c1712ac097dcee08d46bae2c.tar.bz2 | |
Merge "Respect DONT_KILL_APP flag when bringing down a disabled service." into mnc-dev
| -rwxr-xr-x | services/core/java/com/android/server/am/ActiveServices.java | 11 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerService.java | 12 |
2 files changed, 13 insertions, 10 deletions
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java index 899139f..b87e109 100755 --- a/services/core/java/com/android/server/am/ActiveServices.java +++ b/services/core/java/com/android/server/am/ActiveServices.java @@ -2085,7 +2085,8 @@ public final class ActiveServices { } private boolean collectPackageServicesLocked(String packageName, Set<String> filterByClasses, - boolean evenPersistent, boolean doit, ArrayMap<ComponentName, ServiceRecord> services) { + boolean evenPersistent, boolean doit, boolean killProcess, + ArrayMap<ComponentName, ServiceRecord> services) { boolean didSomething = false; for (int i = services.size() - 1; i >= 0; i--) { ServiceRecord service = services.valueAt(i); @@ -2101,7 +2102,7 @@ public final class ActiveServices { didSomething = true; Slog.i(TAG, " Force stopping service " + service); if (service.app != null) { - service.app.removed = true; + service.app.removed = killProcess; if (!service.app.persistent) { service.app.services.remove(service); } @@ -2118,7 +2119,7 @@ public final class ActiveServices { } boolean bringDownDisabledPackageServicesLocked(String packageName, Set<String> filterByClasses, - int userId, boolean evenPersistent, boolean doit) { + int userId, boolean evenPersistent, boolean killProcess, boolean doit) { boolean didSomething = false; if (mTmpCollectionResults != null) { @@ -2128,7 +2129,7 @@ public final class ActiveServices { if (userId == UserHandle.USER_ALL) { for (int i = mServiceMap.size() - 1; i >= 0; i--) { didSomething |= collectPackageServicesLocked(packageName, filterByClasses, - evenPersistent, doit, mServiceMap.valueAt(i).mServicesByName); + evenPersistent, doit, killProcess, mServiceMap.valueAt(i).mServicesByName); if (!doit && didSomething) { return true; } @@ -2138,7 +2139,7 @@ public final class ActiveServices { if (smap != null) { ArrayMap<ComponentName, ServiceRecord> items = smap.mServicesByName; didSomething = collectPackageServicesLocked(packageName, filterByClasses, - evenPersistent, doit, items); + evenPersistent, doit, killProcess, items); } } diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 191bf99..58f7f10 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -5562,7 +5562,7 @@ public final class ActivityManagerService extends ActivityManagerNative } private void cleanupDisabledPackageComponentsLocked( - String packageName, int userId, String[] changedClasses) { + String packageName, int userId, boolean killProcess, String[] changedClasses) { Set<String> disabledClasses = null; boolean packageDisabled = false; @@ -5632,7 +5632,7 @@ public final class ActivityManagerService extends ActivityManagerNative // Clean-up disabled services. mServices.bringDownDisabledPackageServicesLocked( - packageName, disabledClasses, userId, false, true); + packageName, disabledClasses, userId, false, killProcess, true); // Clean-up disabled providers. ArrayList<ContentProviderRecord> providers = new ArrayList<>(); @@ -5717,7 +5717,7 @@ public final class ActivityManagerService extends ActivityManagerNative } if (mServices.bringDownDisabledPackageServicesLocked( - packageName, null, userId, evenPersistent, doit)) { + packageName, null, userId, evenPersistent, true, doit)) { if (!doit) { return true; } @@ -16590,7 +16590,9 @@ public final class ActivityManagerService extends ActivityManagerNative boolean removed = Intent.ACTION_PACKAGE_REMOVED.equals(action); boolean fullUninstall = removed && !intent.getBooleanExtra(Intent.EXTRA_REPLACING, false); - if (!intent.getBooleanExtra(Intent.EXTRA_DONT_KILL_APP, false)) { + final boolean killProcess = + !intent.getBooleanExtra(Intent.EXTRA_DONT_KILL_APP, false); + if (killProcess) { forceStopPackageLocked(ssp, UserHandle.getAppId( intent.getIntExtra(Intent.EXTRA_UID, -1)), false, true, true, false, fullUninstall, userId, @@ -16610,7 +16612,7 @@ public final class ActivityManagerService extends ActivityManagerNative mBatteryStatsService.notePackageUninstalled(ssp); } } else { - cleanupDisabledPackageComponentsLocked(ssp, userId, + cleanupDisabledPackageComponentsLocked(ssp, userId, killProcess, intent.getStringArrayExtra( Intent.EXTRA_CHANGED_COMPONENT_NAME_LIST)); } |
