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:
@@ -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
|
||||
|
||||
@@ -229,9 +229,9 @@ public class TextureView extends View {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow();
|
||||
protected void onDetachedFromWindowInternal() {
|
||||
destroySurface();
|
||||
super.onDetachedFromWindowInternal();
|
||||
}
|
||||
|
||||
private void destroySurface() {
|
||||
|
||||
@@ -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 =
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user