从字符串路径创建位图时android中的OutofMemoryError?

时间:2013-01-25 10:35:42

标签: android bitmapfactory

我有一项服务使用我正在改变Android壁纸。我正在将图像路径传递给服务,然后使用以下代码将图像设置为墙纸:

@Override
public void run() {
    try {
        final String imagePath[] = mSelectedImgPath.split(",");
        while (true) {
            for (int i = 0; i < imagePath.length; i++) {
                bitmap = BitmapFactory.decodeFile(imagePath[i]);
                this.setWallpaper(bitmap);
                Thread.sleep(1000 * time);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我收到以下错误:

01-25 15:59:12.410: E/AndroidRuntime(1702): FATAL EXCEPTION: Thread-149
    01-25 15:59:12.410: E/AndroidRuntime(1702): java.lang.OutOfMemoryError
    01-25 15:59:12.410: E/AndroidRuntime(1702):     at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
    01-25 15:59:12.410: E/AndroidRuntime(1702):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:493)
    01-25 15:59:12.410: E/AndroidRuntime(1702):     at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:299)
    01-25 15:59:12.410: E/AndroidRuntime(1702):     at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:324)
    01-25 15:59:12.410: E/AndroidRuntime(1702):     at com.wallpaper.demo.WallpaperChangeService.run(WallpaperChangeService.java:55)
    01-25 15:59:12.410: E/AndroidRuntime(1702):     at java.lang.Thread.run(Thread.java:856)

由于

3 个答案:

答案 0 :(得分:0)

如果您在模拟器中运行程序,请增加“VM堆”。 转到avd管理器并单击你的android模拟器并增加VM堆的大小。

答案 1 :(得分:0)

因为您的图片尺寸很大,请尝试缩放图片。

参考此Strange out of memory issue while loading an image to a Bitmap object

答案 2 :(得分:0)

使用

bitmap.recycle();
进入循环后

  for (int i = 0; i < imagePath.length; i++) {
            bitmap.recycle();
            bitmap = BitmapFactory.decodeFile(imagePath[i]);
            this.setWallpaper(bitmap);
            Thread.sleep(1000 * time);
        }