diff options
| author | TreeHugger Robot <treehugger-gerrit@google.com> | 2019-09-10 23:23:49 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-09-10 23:23:49 +0000 |
| commit | 0b1782d6b4626e3ecea264b8f5ee074e89f0279d (patch) | |
| tree | 8f4f1a362b5903ab18ecc3971b34b86316e44bc1 /core/java | |
| parent | 724b3637034e475284e237253198cdb1881d4228 (diff) | |
| parent | 1c25fc531f8d14d1eb04a1211ecf66410f6a9ac7 (diff) | |
Merge "Removes strong ref to Activity from RequestFinishCallback" into qt-qpr1-dev
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/app/Activity.java | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index f5b0b592e6a7..a0d0b30e65f7 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -146,6 +146,7 @@ import java.io.FileDescriptor; import java.io.PrintWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -3656,6 +3657,22 @@ public class Activity extends ContextThemeWrapper return false; } + private static final class RequestFinishCallback extends IRequestFinishCallback.Stub { + private final WeakReference<Activity> mActivityRef; + + RequestFinishCallback(WeakReference<Activity> activityRef) { + mActivityRef = activityRef; + } + + @Override + public void requestFinish() { + Activity activity = mActivityRef.get(); + if (activity != null) { + activity.mHandler.post(activity::finishAfterTransition); + } + } + } + /** * Called when the activity has detected the user's press of the back * key. The default implementation simply finishes the current activity, @@ -3681,11 +3698,7 @@ public class Activity extends ContextThemeWrapper // while at the root of the task. This call allows ActivityTaskManager // to intercept or defer finishing. ActivityTaskManager.getService().onBackPressedOnTaskRoot(mToken, - new IRequestFinishCallback.Stub() { - public void requestFinish() { - mHandler.post(() -> finishAfterTransition()); - } - }); + new RequestFinishCallback(new WeakReference<>(this))); } catch (RemoteException e) { finishAfterTransition(); } |
