diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java index e98b286db6d47..f6063463d7f26 100644 --- a/core/java/android/app/WallpaperManager.java +++ b/core/java/android/app/WallpaperManager.java @@ -195,7 +195,12 @@ public class WallpaperManager { if (mDefaultWallpaper != null) { return mDefaultWallpaper; } - mWallpaper = getCurrentWallpaperLocked(context); + mWallpaper = null; + try { + mWallpaper = getCurrentWallpaperLocked(context); + } catch (OutOfMemoryError e) { + Log.w(TAG, "No memory load current wallpaper", e); + } if (mWallpaper == null && returnDefault) { mDefaultWallpaper = getDefaultWallpaperLocked(context); return mDefaultWallpaper; @@ -279,7 +284,12 @@ public class WallpaperManager { } catch (IOException e) { } - return generateBitmap(context, bm, width, height); + try { + return generateBitmap(context, bm, width, height); + } catch (OutOfMemoryError e) { + Log.w(TAG, "Can't generate default bitmap", e); + return bm; + } } } catch (RemoteException e) { } diff --git a/core/java/com/android/internal/service/wallpaper/ImageWallpaper.java b/core/java/com/android/internal/service/wallpaper/ImageWallpaper.java index c09ecfb383d66..251ecbc4be95d 100644 --- a/core/java/com/android/internal/service/wallpaper/ImageWallpaper.java +++ b/core/java/com/android/internal/service/wallpaper/ImageWallpaper.java @@ -24,6 +24,7 @@ import android.graphics.drawable.Drawable; import android.os.HandlerThread; import android.os.Process; import android.service.wallpaper.WallpaperService; +import android.util.Log; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.content.Context; @@ -134,8 +135,8 @@ public class ImageWallpaper extends WallpaperService { final Drawable background = mBackground; final int dw = frame.width(); final int dh = frame.height(); - final int bw = mBackground.getIntrinsicWidth(); - final int bh = mBackground.getIntrinsicHeight(); + final int bw = background != null ? background.getIntrinsicWidth() : 0; + final int bh = background != null ? background.getIntrinsicHeight() : 0; final int availw = dw-bw; final int availh = dh-bh; int xPixels = availw < 0 ? (int)(availw*mXOffset+.5f) : (availw/2); @@ -148,7 +149,9 @@ public class ImageWallpaper extends WallpaperService { c.drawColor(0xff000000); c.restore(); } - background.draw(c); + if (background != null) { + background.draw(c); + } } sh.unlockCanvasAndPost(c); } @@ -156,7 +159,11 @@ public class ImageWallpaper extends WallpaperService { void updateWallpaper() { synchronized (mLock) { - mBackground = mWallpaperManager.getFastDrawable(); + try { + mBackground = mWallpaperManager.getFastDrawable(); + } catch (RuntimeException e) { + Log.w("ImageWallpaper", "Unable to load wallpaper!", e); + } } } }