summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher2/WallpaperChooser.java
diff options
context:
space:
mode:
authorRomain Guy <romainguy@android.com>2009-09-16 16:54:21 -0700
committerRomain Guy <romainguy@android.com>2009-09-16 16:54:21 -0700
commite82140fe200513ea820f0f95463c6230868ded9d (patch)
treec47972189659600e53b193c2a209f14e4b3ccd11 /src/com/android/launcher2/WallpaperChooser.java
parent2ca51dc5f03f3ccd3ef4f55b8e4f068214008894 (diff)
downloadandroid_packages_apps_Trebuchet-e82140fe200513ea820f0f95463c6230868ded9d.tar.gz
android_packages_apps_Trebuchet-e82140fe200513ea820f0f95463c6230868ded9d.tar.bz2
android_packages_apps_Trebuchet-e82140fe200513ea820f0f95463c6230868ded9d.zip
Avoid potention OOME when choosing a wallpaper in Home.
Change-Id: I0b9ffc69fa710a65fa370efa2020601f7a14e9d7
Diffstat (limited to 'src/com/android/launcher2/WallpaperChooser.java')
-rw-r--r--src/com/android/launcher2/WallpaperChooser.java28
1 files changed, 23 insertions, 5 deletions
diff --git a/src/com/android/launcher2/WallpaperChooser.java b/src/com/android/launcher2/WallpaperChooser.java
index 386ae970c..a5cce067a 100644
--- a/src/com/android/launcher2/WallpaperChooser.java
+++ b/src/com/android/launcher2/WallpaperChooser.java
@@ -49,7 +49,7 @@ public class WallpaperChooser extends Activity implements AdapterView.OnItemSele
private ArrayList<Integer> mThumbs;
private ArrayList<Integer> mImages;
- private AsyncTask<Integer,Void,Bitmap> mLoader;
+ private WallpaperLoader mLoader;
@Override
public void onCreate(Bundle icicle) {
@@ -115,9 +115,9 @@ public class WallpaperChooser extends Activity implements AdapterView.OnItemSele
public void onItemSelected(AdapterView parent, View v, int position, long id) {
if (mLoader != null && mLoader.getStatus() != WallpaperLoader.Status.FINISHED) {
- mLoader.cancel(true);
+ mLoader.cancel();
}
- mLoader = new WallpaperLoader().execute(position);
+ mLoader = (WallpaperLoader) new WallpaperLoader().execute(position);
}
/*
@@ -183,16 +183,29 @@ public class WallpaperChooser extends Activity implements AdapterView.OnItemSele
}
class WallpaperLoader extends AsyncTask<Integer, Void, Bitmap> {
+ BitmapFactory.Options mOptions;
+
+ WallpaperLoader() {
+ mOptions = new BitmapFactory.Options();
+ mOptions.inDither = false;
+ mOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;
+ }
+
protected Bitmap doInBackground(Integer... params) {
if (isCancelled()) return null;
- return BitmapFactory.decodeResource(getResources(), mImages.get(params[0]), null);
+ try {
+ return BitmapFactory.decodeResource(getResources(),
+ mImages.get(params[0]), mOptions);
+ } catch (OutOfMemoryError e) {
+ return null;
+ }
}
@Override
protected void onPostExecute(Bitmap b) {
if (b == null) return;
- if (!isCancelled()) {
+ if (!isCancelled() && !mOptions.mCancel) {
// Help the GC
if (mBitmap != null) {
mBitmap.recycle();
@@ -214,5 +227,10 @@ public class WallpaperChooser extends Activity implements AdapterView.OnItemSele
b.recycle();
}
}
+
+ void cancel() {
+ mOptions.requestCancelDecode();
+ super.cancel(true);
+ }
}
}