From 078e715cd4a7c5dfe22aab9322214d8372a8884e Mon Sep 17 00:00:00 2001 From: Bryce Lee Date: Tue, 18 Jul 2023 23:43:47 +0000 Subject: [PATCH] Clear DreamOverlayCallback reference on destroy. This changelist ensures DreamService doesn't reference DreamOverlayCallback after it's destroyed, allowing it to be garbage collected before the DreamService. Test: manual - ensured dream and overly properly entered and exited across invocations and selections. Fixed: b/291723667 Change-Id: I54309e539f4417655e0d1dd47c5190494b5c6715 --- .../android/service/dreams/DreamService.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/core/java/android/service/dreams/DreamService.java b/core/java/android/service/dreams/DreamService.java index 9b19937444bdd..7d9c0a37a13f8 100644 --- a/core/java/android/service/dreams/DreamService.java +++ b/core/java/android/service/dreams/DreamService.java @@ -244,13 +244,7 @@ public class DreamService extends Service implements Window.Callback { private DreamOverlayConnectionHandler mOverlayConnection; - private final IDreamOverlayCallback mOverlayCallback = new IDreamOverlayCallback.Stub() { - @Override - public void onExitRequested() { - // Simply finish dream when exit is requested. - mHandler.post(() -> finish()); - } - }; + private IDreamOverlayCallback mOverlayCallback; public DreamService() { @@ -877,6 +871,13 @@ public class DreamService extends Service implements Window.Callback { mDreamComponent = new ComponentName(this, getClass()); mShouldShowComplications = fetchShouldShowComplications(this /*context*/, fetchServiceInfo(this /*context*/, mDreamComponent)); + mOverlayCallback = new IDreamOverlayCallback.Stub() { + @Override + public void onExitRequested() { + // Simply finish dream when exit is requested. + mHandler.post(() -> finish()); + } + }; super.onCreate(); } @@ -1083,7 +1084,7 @@ public class DreamService extends Service implements Window.Callback { // Just in case destroy came in before detach, let's take care of that now detach(); - + mOverlayCallback = null; super.onDestroy(); }