我的简单代码可以成功更改android壁纸,但是在Galaxy Note 3(4.4.2)上我收到OutOfMemoryError
并且我的应用程序崩溃。
Thread thread4 = new Thread(new Runnable() {
@Override
public void run() {
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
height = metrics.heightPixels;
width = metrics.widthPixels;
mBitmap = BitmapFactory.decodeResource(getResources(), mFullSizeIds[position]);
bitmap = Bitmap.createScaledBitmap(mBitmap, width, height, false);
wallpaperManager = WallpaperManager.getInstance(SingleViewActivity.this);
wallpaperManager.setWallpaperOffsetSteps(1, 1);
wallpaperManager.suggestDesiredDimensions(width, height);
try {
wallpaperManager.setBitmap(bitmap);
HANDLER.post(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(SingleViewActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
Toast.makeText(SingleViewActivity.this, R.string.choose, Toast.LENGTH_SHORT).show();
SingleViewActivity.this.finish();
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
}
});
}
catch (IOException e) {
e.printStackTrace();
}
}
});
thread4.start();
在其他Android版本和其他手机上,我的代码工作正常
logcat的:
04-12 21:56:26.466: E/dalvikvm-heap(7621): Out of memory on a 36864016-byte allocation.
04-12 21:56:26.476: E/AndroidRuntime(7621): FATAL EXCEPTION: main
04-12 21:56:26.476: E/AndroidRuntime(7621): Process: com.allbaloo.app.cartoony_wallpaper, PID: 7621
04-12 21:56:26.476: E/AndroidRuntime(7621): java.lang.OutOfMemoryError
答案 0 :(得分:0)
当没有足够的可用空间时,会出现
OutOfMemory
错误 在你的过程的堆内存。
为此,原因可能是Memory leaking, large drawables used
等。当您收到OOM错误时,应该使用tag : dalvikvm
检查logcat日志。这将提示您如何使用堆
最后一种解决方法是通过在Manifest中声明android:largeHeap="true"
来使您的进程堆积更多空间,但这会使GC更长时间完成,这会导致应用程序暂停,缓慢
答案 1 :(得分:0)
1)尝试使用
bitmap.recycle();
释放内存
2)尝试使用以下方法降低图像质量:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;
final Bitmap bitmap = tmapFactory.decodeFile(mediaFile.getPath(), options);