Android内存不足,正在更换Galaxy Note 3中的壁纸
我的简单代码可以成功地更改android墙纸,但在Galaxy Note 3(4.4.2)中,我遇到了一个Android内存不足,正在更换Galaxy Note 3中的壁纸,android,Android,我的简单代码可以成功地更改android墙纸,但在Galaxy Note 3(4.4.2)中,我遇到了一个OutOfMemoryError,我的应用程序崩溃了 Thread thread4 = new Thread(new Runnable() { @Override public void run() { DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDe
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版本和其他手机上,我的代码运行良好
日志:
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
当没有足够的可用空间时,会出现OutOfMemory
错误
在进程的堆内存中
因此,原因可能是内存泄漏、使用了大的可拖动设备等。在出现OOM错误时,应使用标记:dalvikvm
检查logcat日志。这将提示如何使用堆
最后一个解决方法是通过在清单中声明android:largeHeap=“true”
来增加进程堆的空间,但这将使GC完成的时间更长,这将导致应用程序中的暂停和缓慢运行
bitmap.recycle();
释放内存
2)尝试使用以下方法降低图像质量:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;
final Bitmap bitmap = tmapFactory.decodeFile(mediaFile.getPath(), options);