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

画像のサイズが大きい可能性があるため、画像を拡大縮小してみてください。

Bitmapオブジェクトに画像をロードする際に、この奇妙なメモリ不足の問題を参照してください

于 2013-01-25T10:59:00.683 に答える
0

エミュレーターでプログラムを実行している場合は、「VM ヒープ」を増やします。avd manager に移動し、ur android emulator をクリックして VM ヒープのサイズを増やします。

于 2013-01-25T10:50:13.393 に答える
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 に答える