0

我有一项服务,我正在使用它来更改 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)

谢谢

4

3 回答 3

0

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

于 2013-01-25T10:50:13.393 回答
0

这是因为您的图像可能很大,请尝试缩放图像。

将图像加载到位图对象时,请参阅此奇怪的内存不足问题

于 2013-01-25T10:59:00.683 回答
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);
        }
于 2013-01-25T11:02:04.063 回答