Merge change I32371166 into eclair

* changes:
  Fix issue #2239203: Setting large background causes OOME and soft-reboot spiral
This commit is contained in:
Android (Google) Code Review
2009-11-11 23:10:06 -08:00
2 changed files with 23 additions and 6 deletions

View File

@@ -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) {
}

View File

@@ -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);
}
}
}
}