From 2592f80b55d8c91b5b6c56a5507f8968de860877 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Thu, 8 Mar 2018 17:48:21 -0800 Subject: [PATCH] Stop preloading recent tasks in SysUI when bound to overview service - When bound to the overview service, trim the entire cache in the SysUI recents cache. This is only useful until we remove the recents code in SysUI entired. Bug: 74198066 Test: Manual, dump hprof and ensure no references to thumbnails Change-Id: I694c917f2ed2b84c842c2815c4071947437446ed --- .../android/systemui/recents/RecentsImpl.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java index 055e72e2f8fb7..ac26f68bacf79 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java @@ -26,6 +26,7 @@ import android.app.ActivityManager; import android.app.ActivityOptions; import android.app.trust.TrustManager; import android.content.ActivityNotFoundException; +import android.content.ComponentCallbacks2; import android.content.Context; import android.content.Intent; import android.content.res.Resources; @@ -45,6 +46,8 @@ import android.view.WindowManager; import android.widget.Toast; +import com.android.systemui.Dependency; +import com.android.systemui.OverviewProxyService; import com.google.android.collect.Lists; import com.android.internal.logging.MetricsLogger; @@ -122,6 +125,11 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener @Override public void onTaskStackChangedBackground() { + // Skip background preloading recents in SystemUI if the overview services is bound + if (Dependency.get(OverviewProxyService.class).getProxy() != null) { + return; + } + // Check this is for the right user if (!checkCurrentUserId(mContext, false /* debug */)) { return; @@ -257,6 +265,17 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener } }); + private OverviewProxyService.OverviewProxyListener mOverviewProxyListener = + new OverviewProxyService.OverviewProxyListener() { + @Override + public void onConnectionChanged(boolean isConnected) { + if (!isConnected) { + // Clear everything when the connection to the overview service + Recents.getTaskLoader().onTrimMemory(ComponentCallbacks2.TRIM_MEMORY_COMPLETE); + } + } + }; + public RecentsImpl(Context context) { mContext = context; mHandler = new Handler(); @@ -277,6 +296,11 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener } public void onBootCompleted() { + // Skip preloading tasks if we are already bound to the service + if (Dependency.get(OverviewProxyService.class).getProxy() != null) { + return; + } + // When we start, preload the data associated with the previous recent tasks. // We can use a new plan since the caches will be the same. RecentsTaskLoader loader = Recents.getTaskLoader();