Loading core/java/android/app/ApplicationExitInfo.java +62 −0 Original line number Diff line number Diff line Loading @@ -360,6 +360,53 @@ public final class ApplicationExitInfo implements Parcelable { */ public static final int SUBREASON_FREEZER_BINDER_TRANSACTION = 20; /** * The process was killed because of force-stop, it could be due to that * the user clicked the "Force stop" button of the application in the Settings; * this would be set only when the reason is {@link #REASON_USER_REQUESTED}. * * For internal use only. * @hide */ public static final int SUBREASON_FORCE_STOP = 21; /** * The process was killed because the user removed the application away from Recents; * this would be set only when the reason is {@link #REASON_USER_REQUESTED}. * * For internal use only. * @hide */ public static final int SUBREASON_REMOVE_TASK = 22; /** * The process was killed because the user stopped the application from the task manager; * this would be set only when the reason is {@link #REASON_USER_REQUESTED}. * * For internal use only. * @hide */ public static final int SUBREASON_STOP_APP = 23; /** * The process was killed because the user stopped the application from developer options, * or via the adb shell commmand interface; this would be set only when the reason is * {@link #REASON_USER_REQUESTED}. * * For internal use only. * @hide */ public static final int SUBREASON_KILL_BACKGROUND = 24; /** * The process was killed because of package update; this would be set only when the reason is * {@link #REASON_USER_REQUESTED}. * * For internal use only. * @hide */ public static final int SUBREASON_PACKAGE_UPDATE = 25; // If there is any OEM code which involves additional app kill reasons, it should // be categorized in {@link #REASON_OTHER}, with subreason code starting from 1000. Loading Loading @@ -520,6 +567,11 @@ public final class ApplicationExitInfo implements Parcelable { SUBREASON_ISOLATED_NOT_NEEDED, SUBREASON_FREEZER_BINDER_IOCTL, SUBREASON_FREEZER_BINDER_TRANSACTION, SUBREASON_FORCE_STOP, SUBREASON_REMOVE_TASK, SUBREASON_STOP_APP, SUBREASON_KILL_BACKGROUND, SUBREASON_PACKAGE_UPDATE, }) @Retention(RetentionPolicy.SOURCE) public @interface SubReason {} Loading Loading @@ -1193,6 +1245,16 @@ public final class ApplicationExitInfo implements Parcelable { return "FREEZER BINDER IOCTL"; case SUBREASON_FREEZER_BINDER_TRANSACTION: return "FREEZER BINDER TRANSACTION"; case SUBREASON_FORCE_STOP: return "FORCE STOP"; case SUBREASON_REMOVE_TASK: return "REMOVE TASK"; case SUBREASON_STOP_APP: return "STOP APP"; case SUBREASON_KILL_BACKGROUND: return "KILL BACKGROUND"; case SUBREASON_PACKAGE_UPDATE: return "PACKAGE UPDATE"; default: return "UNKNOWN"; } Loading services/core/java/com/android/server/am/ActivityManagerService.java +6 −6 Original line number Diff line number Diff line Loading @@ -3780,7 +3780,7 @@ public class ActivityManagerService extends IActivityManager.Stub synchronized (mProcLock) { mProcessList.killPackageProcessesLSP(packageName, appId, targetUserId, ProcessList.SERVICE_ADJ, ApplicationExitInfo.REASON_USER_REQUESTED, ApplicationExitInfo.SUBREASON_UNKNOWN, "kill background"); ApplicationExitInfo.SUBREASON_KILL_BACKGROUND, "kill background"); } } } Loading Loading @@ -3810,7 +3810,7 @@ public class ActivityManagerService extends IActivityManager.Stub mProcessList.killPackageProcessesLSP(null /* packageName */, -1 /* appId */, UserHandle.USER_ALL, ProcessList.CACHED_APP_MIN_ADJ, ApplicationExitInfo.REASON_USER_REQUESTED, ApplicationExitInfo.SUBREASON_UNKNOWN, ApplicationExitInfo.SUBREASON_KILL_BACKGROUND, "kill all background"); } Loading Loading @@ -4352,7 +4352,7 @@ public class ActivityManagerService extends IActivityManager.Stub ProcessList.INVALID_ADJ, true, false, true, false, true /* setRemoved */, false, ApplicationExitInfo.REASON_USER_REQUESTED, ApplicationExitInfo.SUBREASON_UNKNOWN, ApplicationExitInfo.SUBREASON_STOP_APP, "fully stop " + packageName + "/" + userId + " by user request"); } Loading Loading @@ -4404,7 +4404,7 @@ public class ActivityManagerService extends IActivityManager.Stub evenPersistent, true /* setRemoved */, uninstalling, packageName == null ? ApplicationExitInfo.REASON_USER_STOPPED : ApplicationExitInfo.REASON_USER_REQUESTED, ApplicationExitInfo.SUBREASON_UNKNOWN, ApplicationExitInfo.SUBREASON_FORCE_STOP, (packageName == null ? ("stop user " + userId) : ("stop " + packageName)) + " due to " + reason); } Loading Loading @@ -13636,7 +13636,7 @@ public class ActivityManagerService extends IActivityManager.Stub UserHandle.getAppId(extraUid), userId, ProcessList.INVALID_ADJ, ApplicationExitInfo.REASON_USER_REQUESTED, ApplicationExitInfo.SUBREASON_UNKNOWN, ApplicationExitInfo.SUBREASON_PACKAGE_UPDATE, "change " + ssp); } } Loading Loading @@ -16365,7 +16365,7 @@ public class ActivityManagerService extends IActivityManager.Stub if (pr.mState.getSetSchedGroup() == ProcessList.SCHED_GROUP_BACKGROUND && pr.mReceivers.numberOfCurReceivers() == 0) { pr.killLocked("remove task", ApplicationExitInfo.REASON_USER_REQUESTED, ApplicationExitInfo.SUBREASON_UNKNOWN, true); ApplicationExitInfo.SUBREASON_REMOVE_TASK, true); } else { // We delay killing processes that are not in the background or running a // receiver. services/core/java/com/android/server/am/OomAdjuster.java +1 −1 Original line number Diff line number Diff line Loading @@ -2561,7 +2561,7 @@ public class OomAdjuster { if (app.getWaitingToKill() != null && app.mReceivers.numberOfCurReceivers() == 0 && state.getSetSchedGroup() == ProcessList.SCHED_GROUP_BACKGROUND) { app.killLocked(app.getWaitingToKill(), ApplicationExitInfo.REASON_USER_REQUESTED, ApplicationExitInfo.SUBREASON_UNKNOWN, true); ApplicationExitInfo.SUBREASON_REMOVE_TASK, true); success = false; } else { int processGroup; Loading Loading
core/java/android/app/ApplicationExitInfo.java +62 −0 Original line number Diff line number Diff line Loading @@ -360,6 +360,53 @@ public final class ApplicationExitInfo implements Parcelable { */ public static final int SUBREASON_FREEZER_BINDER_TRANSACTION = 20; /** * The process was killed because of force-stop, it could be due to that * the user clicked the "Force stop" button of the application in the Settings; * this would be set only when the reason is {@link #REASON_USER_REQUESTED}. * * For internal use only. * @hide */ public static final int SUBREASON_FORCE_STOP = 21; /** * The process was killed because the user removed the application away from Recents; * this would be set only when the reason is {@link #REASON_USER_REQUESTED}. * * For internal use only. * @hide */ public static final int SUBREASON_REMOVE_TASK = 22; /** * The process was killed because the user stopped the application from the task manager; * this would be set only when the reason is {@link #REASON_USER_REQUESTED}. * * For internal use only. * @hide */ public static final int SUBREASON_STOP_APP = 23; /** * The process was killed because the user stopped the application from developer options, * or via the adb shell commmand interface; this would be set only when the reason is * {@link #REASON_USER_REQUESTED}. * * For internal use only. * @hide */ public static final int SUBREASON_KILL_BACKGROUND = 24; /** * The process was killed because of package update; this would be set only when the reason is * {@link #REASON_USER_REQUESTED}. * * For internal use only. * @hide */ public static final int SUBREASON_PACKAGE_UPDATE = 25; // If there is any OEM code which involves additional app kill reasons, it should // be categorized in {@link #REASON_OTHER}, with subreason code starting from 1000. Loading Loading @@ -520,6 +567,11 @@ public final class ApplicationExitInfo implements Parcelable { SUBREASON_ISOLATED_NOT_NEEDED, SUBREASON_FREEZER_BINDER_IOCTL, SUBREASON_FREEZER_BINDER_TRANSACTION, SUBREASON_FORCE_STOP, SUBREASON_REMOVE_TASK, SUBREASON_STOP_APP, SUBREASON_KILL_BACKGROUND, SUBREASON_PACKAGE_UPDATE, }) @Retention(RetentionPolicy.SOURCE) public @interface SubReason {} Loading Loading @@ -1193,6 +1245,16 @@ public final class ApplicationExitInfo implements Parcelable { return "FREEZER BINDER IOCTL"; case SUBREASON_FREEZER_BINDER_TRANSACTION: return "FREEZER BINDER TRANSACTION"; case SUBREASON_FORCE_STOP: return "FORCE STOP"; case SUBREASON_REMOVE_TASK: return "REMOVE TASK"; case SUBREASON_STOP_APP: return "STOP APP"; case SUBREASON_KILL_BACKGROUND: return "KILL BACKGROUND"; case SUBREASON_PACKAGE_UPDATE: return "PACKAGE UPDATE"; default: return "UNKNOWN"; } Loading
services/core/java/com/android/server/am/ActivityManagerService.java +6 −6 Original line number Diff line number Diff line Loading @@ -3780,7 +3780,7 @@ public class ActivityManagerService extends IActivityManager.Stub synchronized (mProcLock) { mProcessList.killPackageProcessesLSP(packageName, appId, targetUserId, ProcessList.SERVICE_ADJ, ApplicationExitInfo.REASON_USER_REQUESTED, ApplicationExitInfo.SUBREASON_UNKNOWN, "kill background"); ApplicationExitInfo.SUBREASON_KILL_BACKGROUND, "kill background"); } } } Loading Loading @@ -3810,7 +3810,7 @@ public class ActivityManagerService extends IActivityManager.Stub mProcessList.killPackageProcessesLSP(null /* packageName */, -1 /* appId */, UserHandle.USER_ALL, ProcessList.CACHED_APP_MIN_ADJ, ApplicationExitInfo.REASON_USER_REQUESTED, ApplicationExitInfo.SUBREASON_UNKNOWN, ApplicationExitInfo.SUBREASON_KILL_BACKGROUND, "kill all background"); } Loading Loading @@ -4352,7 +4352,7 @@ public class ActivityManagerService extends IActivityManager.Stub ProcessList.INVALID_ADJ, true, false, true, false, true /* setRemoved */, false, ApplicationExitInfo.REASON_USER_REQUESTED, ApplicationExitInfo.SUBREASON_UNKNOWN, ApplicationExitInfo.SUBREASON_STOP_APP, "fully stop " + packageName + "/" + userId + " by user request"); } Loading Loading @@ -4404,7 +4404,7 @@ public class ActivityManagerService extends IActivityManager.Stub evenPersistent, true /* setRemoved */, uninstalling, packageName == null ? ApplicationExitInfo.REASON_USER_STOPPED : ApplicationExitInfo.REASON_USER_REQUESTED, ApplicationExitInfo.SUBREASON_UNKNOWN, ApplicationExitInfo.SUBREASON_FORCE_STOP, (packageName == null ? ("stop user " + userId) : ("stop " + packageName)) + " due to " + reason); } Loading Loading @@ -13636,7 +13636,7 @@ public class ActivityManagerService extends IActivityManager.Stub UserHandle.getAppId(extraUid), userId, ProcessList.INVALID_ADJ, ApplicationExitInfo.REASON_USER_REQUESTED, ApplicationExitInfo.SUBREASON_UNKNOWN, ApplicationExitInfo.SUBREASON_PACKAGE_UPDATE, "change " + ssp); } } Loading Loading @@ -16365,7 +16365,7 @@ public class ActivityManagerService extends IActivityManager.Stub if (pr.mState.getSetSchedGroup() == ProcessList.SCHED_GROUP_BACKGROUND && pr.mReceivers.numberOfCurReceivers() == 0) { pr.killLocked("remove task", ApplicationExitInfo.REASON_USER_REQUESTED, ApplicationExitInfo.SUBREASON_UNKNOWN, true); ApplicationExitInfo.SUBREASON_REMOVE_TASK, true); } else { // We delay killing processes that are not in the background or running a // receiver.
services/core/java/com/android/server/am/OomAdjuster.java +1 −1 Original line number Diff line number Diff line Loading @@ -2561,7 +2561,7 @@ public class OomAdjuster { if (app.getWaitingToKill() != null && app.mReceivers.numberOfCurReceivers() == 0 && state.getSetSchedGroup() == ProcessList.SCHED_GROUP_BACKGROUND) { app.killLocked(app.getWaitingToKill(), ApplicationExitInfo.REASON_USER_REQUESTED, ApplicationExitInfo.SUBREASON_UNKNOWN, true); ApplicationExitInfo.SUBREASON_REMOVE_TASK, true); success = false; } else { int processGroup; Loading