From 1f4c02bb18ef8e8cc0fecd6786209089f84de147 Mon Sep 17 00:00:00 2001 From: Wale Ogunwale Date: Thu, 13 Nov 2014 14:22:32 -0800 Subject: [PATCH] Stop activity onVisibleBehindCanceled() Once an activity is no longer visible behind and has released its background resources, it is added to the list of activities that can be stopped, but not actually stopped until the next major event (like another activity starting). We now schedule the idle processing once the background resources have been released so the activity can be stopped as soon as possible. Bug: 18191707 Change-Id: I472eee949c1a78b4d944454463f03c90e7d2618b --- .../java/com/android/server/am/ActivityManagerService.java | 2 +- services/core/java/com/android/server/am/ActivityStack.java | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index fc6e73fa75b25..fd5489299f8f3 100755 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -6260,7 +6260,7 @@ public final class ActivityManagerService extends ActivityManagerNative synchronized (this) { ActivityStack stack = ActivityRecord.getStackLocked(token); if (stack != null) { - stack.backgroundResourcesReleased(token); + stack.backgroundResourcesReleased(); } } } finally { diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index 3a1fafe2bbc3e..c8b7205f806cf 100755 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -3317,17 +3317,18 @@ final class ActivityStack { mHandler.sendEmptyMessageDelayed(RELEASE_BACKGROUND_RESOURCES_TIMEOUT_MSG, 500); } else { Slog.e(TAG, "releaseBackgroundResources: activity " + r + " no longer running"); - backgroundResourcesReleased(r.appToken); + backgroundResourcesReleased(); } } } - final void backgroundResourcesReleased(IBinder token) { + final void backgroundResourcesReleased() { mHandler.removeMessages(RELEASE_BACKGROUND_RESOURCES_TIMEOUT_MSG); final ActivityRecord r = getVisibleBehindActivity(); if (r != null) { mStackSupervisor.mStoppingActivities.add(r); setVisibleBehindActivity(null); + mStackSupervisor.scheduleIdleTimeoutLocked(null); } mStackSupervisor.resumeTopActivitiesLocked(); }