summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/TaskStackListener.java6
-rw-r--r--packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListeners.java9
2 files changed, 15 insertions, 0 deletions
diff --git a/core/java/android/app/TaskStackListener.java b/core/java/android/app/TaskStackListener.java
index 97b9176d4a86..a4a97c4cac1d 100644
--- a/core/java/android/app/TaskStackListener.java
+++ b/core/java/android/app/TaskStackListener.java
@@ -19,6 +19,7 @@ package android.app;
import android.annotation.UnsupportedAppUsage;
import android.app.ActivityManager.TaskSnapshot;
import android.content.ComponentName;
+import android.os.Binder;
import android.os.IBinder;
import android.os.RemoteException;
@@ -155,6 +156,11 @@ public abstract class TaskStackListener extends ITaskStackListener.Stub {
@Override
@UnsupportedAppUsage
public void onTaskSnapshotChanged(int taskId, TaskSnapshot snapshot) throws RemoteException {
+ if (Binder.getCallingPid() != android.os.Process.myPid()
+ && snapshot != null && snapshot.getSnapshot() != null) {
+ // Preemptively clear any reference to the buffer
+ snapshot.getSnapshot().destroy();
+ }
}
@Override
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListeners.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListeners.java
index 6e3eb7c397bc..d250acca32c5 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListeners.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListeners.java
@@ -70,6 +70,15 @@ public class TaskStackChangeListeners extends TaskStackListener {
public void removeListener(TaskStackChangeListener listener) {
mTaskStackListeners.remove(listener);
+ if (mTaskStackListeners.isEmpty() && mRegistered) {
+ // Unregister mTaskStackListener once we have no more listeners
+ try {
+ ActivityTaskManager.getService().unregisterTaskStackListener(this);
+ mRegistered = false;
+ } catch (Exception e) {
+ Log.w(TAG, "Failed to call unregisterTaskStackListener", e);
+ }
+ }
}
@Override