summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/pip/PipContentOverlay.java12
1 files changed, 12 insertions, 0 deletions
diff --git a/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/pip/PipContentOverlay.java b/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/pip/PipContentOverlay.java
index 62ca5c687a2a..9f0c7322dfff 100644
--- a/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/pip/PipContentOverlay.java
+++ b/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/pip/PipContentOverlay.java
@@ -169,6 +169,8 @@ public abstract class PipContentOverlay {
// The maximum size for app icon in pixel.
private static final int MAX_APP_ICON_SIZE_DP = 72;
+ private static final long RECYCLE_BITMAP_TIMEOUT_MILLIS = 2_000;
+
private final Context mContext;
private final int mAppIconSizePx;
/**
@@ -231,6 +233,12 @@ public abstract class PipContentOverlay {
tx.setAlpha(mLeash, 0f);
tx.reparent(mLeash, parentLeash);
tx.apply();
+
+ // Recycle the mBitmap as a last resort.
+ if (mContext.getMainThreadHandler() != null) {
+ mContext.getMainThreadHandler().postDelayed(
+ this::safeRecycle, RECYCLE_BITMAP_TIMEOUT_MILLIS);
+ }
}
@Override
@@ -256,6 +264,10 @@ public abstract class PipContentOverlay {
@Override
public void detach(SurfaceControl.Transaction tx) {
super.detach(tx);
+ safeRecycle();
+ }
+
+ private void safeRecycle() {
if (mBitmap != null && !mBitmap.isRecycled()) {
mBitmap.recycle();
}