diff options
| -rw-r--r-- | core/java/android/app/TaskStackListener.java | 6 | ||||
| -rw-r--r-- | packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListeners.java | 9 |
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 |