在Galaxy Note 3中更换壁纸的Android内存不足

时间:2015-04-13 05:06:13

标签: android

我的简单代码可以成功更改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

2 个答案:

答案 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);