summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/ActivityManagerInternal.java9
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java9
-rw-r--r--services/core/java/com/android/server/pm/UserManagerService.java5
-rw-r--r--services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java6
4 files changed, 22 insertions, 7 deletions
diff --git a/core/java/android/app/ActivityManagerInternal.java b/core/java/android/app/ActivityManagerInternal.java
index 39fc18d8b747..f1472dd002fd 100644
--- a/core/java/android/app/ActivityManagerInternal.java
+++ b/core/java/android/app/ActivityManagerInternal.java
@@ -81,6 +81,15 @@ public abstract class ActivityManagerInternal {
String processName, String abiOverride, int uid, Runnable crashHandler);
/**
+ * Called when a user has been deleted. This can happen during normal device usage
+ * or just at startup, when partially removed users are purged. Any state persisted by the
+ * ActivityManager should be purged now.
+ *
+ * @param userId The user being cleaned up.
+ */
+ public abstract void onUserRemoved(@UserIdInt int userId);
+
+ /**
* Kill foreground apps from the specified user.
*/
public abstract void killForegroundAppsForUser(@UserIdInt int userId);
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 9b2743ca6b1d..0bd134c8dfac 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -18779,6 +18779,15 @@ public class ActivityManagerService extends IActivityManager.Stub
}
@Override
+ public void onUserRemoved(@UserIdInt int userId) {
+ // Clean up any ActivityTaskManager state (by telling it the user is stopped)
+ mAtmInternal.onUserStopped(userId);
+ // Clean up various services by removing the user
+ mBatteryStatsService.onUserRemoved(userId);
+ mUserController.onUserRemoved(userId);
+ }
+
+ @Override
public void killForegroundAppsForUser(@UserIdInt int userId) {
synchronized (ActivityManagerService.this) {
final ArrayList<ProcessRecord> procs = new ArrayList<>();
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index 4561d2e7a8b2..e6af86e52035 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -3890,9 +3890,8 @@ public class UserManagerService extends IUserManager.Stub {
new Thread() {
@Override
public void run() {
- // Clean up any ActivityTaskManager state
- LocalServices.getService(ActivityTaskManagerInternal.class)
- .onUserStopped(userId);
+ LocalServices.getService(ActivityManagerInternal.class)
+ .onUserRemoved(userId);
removeUserState(userId);
}
}.start();
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java
index d48df9ff8e6c..4181f4be30f7 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java
@@ -306,11 +306,9 @@ public abstract class ActivityTaskManagerInternal {
public abstract void setAllowAppSwitches(@NonNull String type, int uid, int userId);
/**
- * Called when a user has been deleted. This can happen during normal device usage
- * or just at startup, when partially removed users are purged. Any state persisted by the
- * ActivityManager should be purged now.
+ * Called when a user has been stopped.
*
- * @param userId The user being cleaned up.
+ * @param userId The user being stopped.
*/
public abstract void onUserStopped(int userId);
public abstract boolean isGetTasksAllowed(String caller, int callingPid, int callingUid);