diff options
-rw-r--r-- | libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/pip/PipContentOverlay.java | 12 |
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(); } |