Loading services/core/java/com/android/server/wallpaper/WallpaperManagerService.java +30 −13 Original line number Diff line number Diff line Loading @@ -1237,6 +1237,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub saveSettingsLocked(mWallpaper.userId); } FgThread.getHandler().removeCallbacks(mResetRunnable); mContext.getMainThreadHandler().removeCallbacks(this::tryToRebind); } } } Loading Loading @@ -1279,6 +1280,34 @@ public class WallpaperManagerService extends IWallpaperManager.Stub } } private void tryToRebind() { synchronized (mLock) { if (mWallpaper.wallpaperUpdating) { return; } final ComponentName wpService = mWallpaper.wallpaperComponent; // The broadcast of package update could be delayed after service disconnected. Try // to re-bind the service for 10 seconds. if (bindWallpaperComponentLocked( wpService, true, false, mWallpaper, null)) { mWallpaper.connection.scheduleTimeoutLocked(); } else if (SystemClock.uptimeMillis() - mWallpaper.lastDiedTime < WALLPAPER_RECONNECT_TIMEOUT_MS) { // Bind fail without timeout, schedule rebind Slog.w(TAG, "Rebind fail! Try again later"); mContext.getMainThreadHandler().postDelayed(this::tryToRebind, 1000); } else { // Timeout Slog.w(TAG, "Reverting to built-in wallpaper!"); clearWallpaperLocked(true, FLAG_SYSTEM, mWallpaper.userId, null); final String flattened = wpService.flattenToString(); EventLog.writeEvent(EventLogTags.WP_WALLPAPER_CRASHED, flattened.substring(0, Math.min(flattened.length(), MAX_WALLPAPER_COMPONENT_LOG_LENGTH))); } } } private void processDisconnect(final ServiceConnection connection) { synchronized (mLock) { // The wallpaper disappeared. If this isn't a system-default one, track Loading @@ -1302,21 +1331,9 @@ public class WallpaperManagerService extends IWallpaperManager.Stub clearWallpaperLocked(true, FLAG_SYSTEM, mWallpaper.userId, null); } else { mWallpaper.lastDiedTime = SystemClock.uptimeMillis(); clearWallpaperComponentLocked(mWallpaper); if (bindWallpaperComponentLocked( wpService, false, false, mWallpaper, null)) { mWallpaper.connection.scheduleTimeoutLocked(); } else { Slog.w(TAG, "Reverting to built-in wallpaper!"); clearWallpaperLocked(true, FLAG_SYSTEM, mWallpaper.userId, null); tryToRebind(); } } final String flattened = wpService.flattenToString(); EventLog.writeEvent(EventLogTags.WP_WALLPAPER_CRASHED, flattened.substring(0, Math.min(flattened.length(), MAX_WALLPAPER_COMPONENT_LOG_LENGTH))); } } else { if (DEBUG_LIVE) { Slog.i(TAG, "Wallpaper changed during disconnect tracking; ignoring"); Loading Loading
services/core/java/com/android/server/wallpaper/WallpaperManagerService.java +30 −13 Original line number Diff line number Diff line Loading @@ -1237,6 +1237,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub saveSettingsLocked(mWallpaper.userId); } FgThread.getHandler().removeCallbacks(mResetRunnable); mContext.getMainThreadHandler().removeCallbacks(this::tryToRebind); } } } Loading Loading @@ -1279,6 +1280,34 @@ public class WallpaperManagerService extends IWallpaperManager.Stub } } private void tryToRebind() { synchronized (mLock) { if (mWallpaper.wallpaperUpdating) { return; } final ComponentName wpService = mWallpaper.wallpaperComponent; // The broadcast of package update could be delayed after service disconnected. Try // to re-bind the service for 10 seconds. if (bindWallpaperComponentLocked( wpService, true, false, mWallpaper, null)) { mWallpaper.connection.scheduleTimeoutLocked(); } else if (SystemClock.uptimeMillis() - mWallpaper.lastDiedTime < WALLPAPER_RECONNECT_TIMEOUT_MS) { // Bind fail without timeout, schedule rebind Slog.w(TAG, "Rebind fail! Try again later"); mContext.getMainThreadHandler().postDelayed(this::tryToRebind, 1000); } else { // Timeout Slog.w(TAG, "Reverting to built-in wallpaper!"); clearWallpaperLocked(true, FLAG_SYSTEM, mWallpaper.userId, null); final String flattened = wpService.flattenToString(); EventLog.writeEvent(EventLogTags.WP_WALLPAPER_CRASHED, flattened.substring(0, Math.min(flattened.length(), MAX_WALLPAPER_COMPONENT_LOG_LENGTH))); } } } private void processDisconnect(final ServiceConnection connection) { synchronized (mLock) { // The wallpaper disappeared. If this isn't a system-default one, track Loading @@ -1302,21 +1331,9 @@ public class WallpaperManagerService extends IWallpaperManager.Stub clearWallpaperLocked(true, FLAG_SYSTEM, mWallpaper.userId, null); } else { mWallpaper.lastDiedTime = SystemClock.uptimeMillis(); clearWallpaperComponentLocked(mWallpaper); if (bindWallpaperComponentLocked( wpService, false, false, mWallpaper, null)) { mWallpaper.connection.scheduleTimeoutLocked(); } else { Slog.w(TAG, "Reverting to built-in wallpaper!"); clearWallpaperLocked(true, FLAG_SYSTEM, mWallpaper.userId, null); tryToRebind(); } } final String flattened = wpService.flattenToString(); EventLog.writeEvent(EventLogTags.WP_WALLPAPER_CRASHED, flattened.substring(0, Math.min(flattened.length(), MAX_WALLPAPER_COMPONENT_LOG_LENGTH))); } } else { if (DEBUG_LIVE) { Slog.i(TAG, "Wallpaper changed during disconnect tracking; ignoring"); Loading