Workaround apps not calling super.onDetachedFromWindow()

Bug: 13338698
 Move the releasing of hardware resources to a new
 @hide onDetachedFromWindowInternal

Change-Id: I52b4e6ba4d5b3ce20b89cabffa248d1d780e3e81
This commit is contained in:
John Reck
2014-03-06 12:31:17 -08:00
parent cb20740ee1
commit 198d20842a
5 changed files with 23 additions and 9 deletions

View File

@@ -256,7 +256,7 @@ public class SurfaceView extends View {
}
@Override
protected void onDetachedFromWindow() {
protected void onDetachedFromWindowInternal() {
if (mGlobalListenersAdded) {
ViewTreeObserver observer = getViewTreeObserver();
observer.removeOnScrollChangedListener(mScrollChangedListener);
@@ -278,7 +278,7 @@ public class SurfaceView extends View {
mSession = null;
mLayout.token = null;
super.onDetachedFromWindow();
super.onDetachedFromWindowInternal();
}
@Override

View File

@@ -229,9 +229,9 @@ public class TextureView extends View {
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
protected void onDetachedFromWindowInternal() {
destroySurface();
super.onDetachedFromWindowInternal();
}
private void destroySurface() {

View File

@@ -13110,6 +13110,19 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @see #onAttachedToWindow()
*/
protected void onDetachedFromWindow() {
}
/**
* This is a framework-internal mirror of onDetachedFromWindow() that's called
* after onDetachedFromWindow().
*
* If you override this you *MUST* call super.onDetachedFromWindowInternal()!
* The super method should be called at the end of the overriden method to ensure
* subclasses are destroyed first
*
* @hide
*/
protected void onDetachedFromWindowInternal() {
mPrivateFlags &= ~PFLAG_CANCEL_NEXT_UP_EVENT;
mPrivateFlags3 &= ~PFLAG3_IS_LAID_OUT;
@@ -13297,6 +13310,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
}
onDetachedFromWindow();
onDetachedFromWindowInternal();
ListenerInfo li = mListenerInfo;
final CopyOnWriteArrayList<OnAttachStateChangeListener> listeners =

View File

@@ -4730,9 +4730,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
protected void onDetachedFromWindowInternal() {
if (mPreDrawRegistered) {
getViewTreeObserver().removeOnPreDrawListener(this);
mPreDrawRegistered = false;
@@ -4741,6 +4739,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
resetResolvedDrawables();
if (mEditor != null) mEditor.onDetachedFromWindow();
super.onDetachedFromWindowInternal();
}
@Override

View File

@@ -601,7 +601,7 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
* Must not be called before a renderer has been set.
*/
@Override
protected void onDetachedFromWindow() {
protected void onDetachedFromWindowInternal() {
if (LOG_ATTACH_DETACH) {
Log.d(TAG, "onDetachedFromWindow");
}
@@ -609,7 +609,7 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
mGLThread.requestExitAndWait();
}
mDetached = true;
super.onDetachedFromWindow();
super.onDetachedFromWindowInternal();
}
// ----------------------------------------------------------------------