Recycling bitmaps in TransitionAnimationView.
This reduces memory pressure, but does not actually fix
the leak.
Bug: 3226188
Change-Id: Ia305bfe0f7101d1da7355a7721a8519676fcf442
diff --git a/src/com/android/contacts/widget/TransitionAnimationView.java b/src/com/android/contacts/widget/TransitionAnimationView.java
index d0e81fe..4721c5f 100644
--- a/src/com/android/contacts/widget/TransitionAnimationView.java
+++ b/src/com/android/contacts/widget/TransitionAnimationView.java
@@ -105,7 +105,11 @@
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
- if (changed) {
+ if (changed || mPreviousStateBitmap == null) {
+ if (mPreviousStateBitmap != null) {
+ mPreviousStateBitmap.recycle();
+ mPreviousStateBitmap = null;
+ }
int width = right - left;
int height = bottom - top;
if (width > 0 && height > 0) {
@@ -117,11 +121,21 @@
width - mClipMargins.right, height - mClipMargins.bottom);
} else {
mPreviousStateBitmap = null;
- mPreviousStateView = null;
+ mPreviousStateView.setBackgroundDrawable(null);
}
}
}
+ @Override
+ protected void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ mPreviousStateView.setBackgroundDrawable(null);
+ if (mPreviousStateBitmap != null) {
+ mPreviousStateBitmap.recycle();
+ mPreviousStateBitmap = null;
+ }
+ }
+
public static void startAnimation(View view, boolean closing) {
TransitionAnimationView container = null;
ViewParent parent = view.getParent();