summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2019-09-10 23:23:49 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2019-09-10 23:23:49 +0000
commit0b1782d6b4626e3ecea264b8f5ee074e89f0279d (patch)
tree8f4f1a362b5903ab18ecc3971b34b86316e44bc1 /core/java
parent724b3637034e475284e237253198cdb1881d4228 (diff)
parent1c25fc531f8d14d1eb04a1211ecf66410f6a9ac7 (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.java23
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();
}