diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java index 2c33b60b98b51..2bb5f28e6bec8 100644 --- a/core/java/android/view/SurfaceView.java +++ b/core/java/android/view/SurfaceView.java @@ -678,9 +678,16 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb } finally { mIsCreating = false; if (mSurfaceControl != null && !mSurfaceCreated) { - mSurfaceControl.destroy(); mSurface.release(); - mSurfaceControl = null; + // If we are not in the stopped state, then the destruction of the Surface + // represents a visual change we need to display, and we should go ahead + // and destroy the SurfaceControl. However if we are in the stopped state, + // we can just leave the Surface around so it can be a part of animations, + // and we let the life-time be tied to the parent surface. + if (!mWindowStopped) { + mSurfaceControl.destroy(); + mSurfaceControl = null; + } } } } catch (Exception ex) {