diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityRecord.java | 9 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityTaskManagerService.java | 9 |
2 files changed, 12 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 7d398a4a1c18..36e906cf9a62 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -1935,7 +1935,10 @@ final class ActivityRecord extends ConfigurationContainer { * HistoryRecord. * Normally the server-side record will be removed when the client reports back after * destruction. If, however, at this point there is no client process attached, the record will - * removed immediately. + * be removed immediately. + * + * @return {@code true} if activity was immediately removed from history, {@code false} + * otherwise. */ boolean destroyImmediately(boolean removeFromApp, String reason) { if (DEBUG_SWITCH || DEBUG_CLEANUP) { @@ -3429,8 +3432,8 @@ final class ActivityRecord extends ConfigurationContainer { return false; } final ActivityStack stack = getActivityStack(); - if (stack == null || this == stack.getResumedActivity() || this == stack.mPausingActivity - || !mHaveState || !stopped) { + if (isState(RESUMED) || stack == null || this == stack.mPausingActivity || !mHaveState + || !stopped) { // We're not ready for this kind of thing. return false; } diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index 3c5947a51e11..f2ca2ba82dfb 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -82,6 +82,8 @@ import static com.android.server.am.ActivityManagerServiceDumpProcessesProto.PRE import static com.android.server.am.ActivityManagerServiceDumpProcessesProto.SCREEN_COMPAT_PACKAGES; import static com.android.server.am.ActivityManagerServiceDumpProcessesProto.ScreenCompatPackage.MODE; import static com.android.server.am.ActivityManagerServiceDumpProcessesProto.ScreenCompatPackage.PACKAGE; +import static com.android.server.wm.ActivityStack.ActivityState.DESTROYED; +import static com.android.server.wm.ActivityStack.ActivityState.DESTROYING; import static com.android.server.wm.ActivityStack.REMOVE_TASK_MODE_DESTROYING; import static com.android.server.wm.ActivityStackSupervisor.DEFER_RESUME; import static com.android.server.wm.ActivityStackSupervisor.ON_TOP; @@ -3237,11 +3239,12 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { synchronized (mGlobalLock) { final long origId = Binder.clearCallingIdentity(); try { - ActivityRecord r = ActivityRecord.isInStackLocked(token); - if (r == null) { + final ActivityRecord r = ActivityRecord.isInStackLocked(token); + if (r == null || !r.isDestroyable()) { return false; } - return r.safelyDestroy("app-req"); + r.destroyImmediately(true /* removeFromApp */, "app-req"); + return r.isState(DESTROYING, DESTROYED); } finally { Binder.restoreCallingIdentity(origId); } |