am 8a6ba494: Merge "All runnable are stopped on detach. DO NOT MERGE." into gingerbread
* commit '8a6ba494a28702e68b0a8fbd8bac34335536a8f8':
All runnable are stopped on detach. DO NOT MERGE.
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 6b57f87..7c09a90 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -3831,6 +3831,18 @@
hideError();
}
+ if (mBlink != null) {
+ mBlink.cancel();
+ }
+
+ if (mInsertionPointCursorController != null) {
+ mInsertionPointCursorController.onDetached();
+ }
+
+ if (mSelectionModifierCursorController != null) {
+ mSelectionModifierCursorController.onDetached();
+ }
+
hideControllers();
}
@@ -7740,6 +7752,13 @@
* @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 {
@@ -8017,12 +8036,12 @@
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() {
@@ -8062,6 +8081,11 @@
hide();
}
}
+
+ @Override
+ public void onDetached() {
+ removeCallbacks(mHider);
+ }
}
private class SelectionModifierCursorController implements CursorController {
@@ -8219,6 +8243,11 @@
hide();
}
}
+
+ @Override
+ public void onDetached() {
+ removeCallbacks(mHider);
+ }
}
private void hideInsertionPointCursorController() {