diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java index d598017dacaa0..5f5645f9e3cb3 100644 --- a/core/java/android/service/wallpaper/WallpaperService.java +++ b/core/java/android/service/wallpaper/WallpaperService.java @@ -1536,8 +1536,9 @@ public abstract class WallpaperService extends Service { // may have been destroyed so now we need to make // sure it is re-created. doOffsetsChanged(false); - // force relayout to get new surface - updateSurface(true, false, false); + // It will check mSurfaceCreated so no need to force relayout. + updateSurface(false /* forceRelayout */, false /* forceReport */, + false /* redrawNeeded */); } onVisibilityChanged(visible); if (mReportedVisible && mFrozenRequested) { diff --git a/services/core/java/com/android/server/wm/WindowSurfaceController.java b/services/core/java/com/android/server/wm/WindowSurfaceController.java index 5f43800bd9d55..fd379bf1d9f49 100644 --- a/services/core/java/com/android/server/wm/WindowSurfaceController.java +++ b/services/core/java/com/android/server/wm/WindowSurfaceController.java @@ -139,6 +139,12 @@ class WindowSurfaceController { "Destroying surface %s called by %s", this, Debug.getCallers(8)); try { if (mSurfaceControl != null) { + if (mAnimator.mIsWallpaper && !mAnimator.mWin.mWindowRemovalAllowed + && !mAnimator.mWin.mRemoveOnExit) { + // The wallpaper surface should have the same lifetime as its window. + Slog.e(TAG, "Unexpected removing wallpaper surface of " + mAnimator.mWin + + " by " + Debug.getCallers(8)); + } t.remove(mSurfaceControl); } } catch (RuntimeException e) {