summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGilles Debunne <debunne@google.com>2011-01-10 18:36:33 -0800
committerandroid-merger <android-build@android.com>2011-02-08 14:10:44 -0800
commit938ea7a4c149a73207297f2ed8ce283768311c98 (patch)
tree168e01915aa1416e8bb04ec945b00a505b6321a8
parent3145ab8c1be61a63890b367f2a0e7d0056f2694f (diff)
downloadbase-938ea7a4c149a73207297f2ed8ce283768311c98.tar.gz
All runnable are stopped on detach. DO NOT MERGE.
This prevents these runnable from holding a reference to the context that will prevent it from being garbage collected. The blinking cursor is especially bad and appears in memore traces. Change-Id: I8acbfbbfc59975dfd7bcf06e941074ea7dc0b0bc
-rw-r--r--core/java/android/widget/TextView.java35
1 files changed, 32 insertions, 3 deletions
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index ed1769692b20..ae5860ad2395 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -3815,6 +3815,18 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
hideError();
}
+ if (mBlink != null) {
+ mBlink.cancel();
+ }
+
+ if (mInsertionPointCursorController != null) {
+ mInsertionPointCursorController.onDetached();
+ }
+
+ if (mSelectionModifierCursorController != null) {
+ mSelectionModifierCursorController.onDetached();
+ }
+
hideControllers();
}
@@ -7718,6 +7730,13 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
* @param event The touch event
*/
public boolean onTouchEvent(MotionEvent event);
+
+ /**
+ * Called when the view is detached from window. Perform house keeping task, such as
+ * stopping Runnable thread that would otherwise keep a reference on the context, thus
+ * preventing the activity to be recycled.
+ */
+ public void onDetached();
}
private class HandleView extends View {
@@ -7995,12 +8014,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
public void hide() {
mHandle.hide();
- TextView.this.removeCallbacks(mHider);
+ removeCallbacks(mHider);
}
private void hideDelayed(int msec) {
- TextView.this.removeCallbacks(mHider);
- TextView.this.postDelayed(mHider, msec);
+ removeCallbacks(mHider);
+ postDelayed(mHider, msec);
}
public boolean isShowing() {
@@ -8040,6 +8059,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
hide();
}
}
+
+ @Override
+ public void onDetached() {
+ removeCallbacks(mHider);
+ }
}
private class SelectionModifierCursorController implements CursorController {
@@ -8197,6 +8221,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
hide();
}
}
+
+ @Override
+ public void onDetached() {
+ removeCallbacks(mHider);
+ }
}
private void hideInsertionPointCursorController() {