0

私のアプリケーションでこの例外が発生した場合、この例外を修正する方法を教えてください:-Imageloaderコードを変更しようとしましたが、成功しませんでした。

 //decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(new FileInputStream(f),null,o);
        /*
         *  options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(res, resId, options);

// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
return BitmapFactory.decodeResource(res, resId, options);

         * 
         * 
         * 
         * */
     // Calculate inSampleSize
        o.inSampleSize = calculateInSampleSize(o,100,100);
        o.inJustDecodeBounds = false;
        //Find the correct scale value. It should be the power of 2.
       // final int REQUIRED_SIZE=70;
        //int width_tmp=o.outWidth, height_tmp=o.outHeight;
  //            int scale=1;
//            while(true){
 //                if(width_tmp/2<REQUIRED_SIZE || height_tmp/2<REQUIRED_SIZE)
 //                    break;
 //                width_tmp/=2;
 //                height_tmp/=2;
//                scale*=2;
 //            }

               //decode with inSampleSize
           //            BitmapFactory.Options o2 = new BitmapFactory.Options();
              //            
            //            o2.inSampleSize=2;

        return BitmapFactory.decodeStream(new FileInputStream(f), null, null);

このセクションで例外が発生するため、上記のコードの何が問題になっていますか...

  06-28 10:53:36.676: E/dalvikvm-heap(595): 960000-byte external allocation too large for this process.
  06-28 10:53:36.806: E/GraphicsJNI(595): VM won't let us allocate 960000 bytes
 06-28 10:53:36.836: E/AndroidRuntime(595): FATAL EXCEPTION: AsyncTask #1
06-28 10:53:36.836: E/AndroidRuntime(595): java.lang.RuntimeException: An error occured while executing doInBackground()
 06-28 10:53:36.836: E/AndroidRuntime(595):     at android.os.AsyncTask$3.done(AsyncTask.java:200)
 06-28 10:53:36.836: E/AndroidRuntime(595):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
 06-28 10:53:36.836: E/AndroidRuntime(595):     at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
  06-28 10:53:36.836: E/AndroidRuntime(595):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
   06-28 10:53:36.836: E/AndroidRuntime(595):   at java.util.concurrent.FutureTask.run(FutureTask.java:138)
06-28 10:53:36.836: E/AndroidRuntime(595):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
    06-28 10:53:36.836: E/AndroidRuntime(595):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
    06-28 10:53:36.836: E/AndroidRuntime(595):  at java.lang.Thread.run(Thread.java:1019)
    06-28 10:53:36.836: E/AndroidRuntime(595): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget
    06-28 10:53:36.836: E/AndroidRuntime(595):  at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
    06-28 10:53:36.836: E/AndroidRuntime(595):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:470)
    06-28 10:53:36.836: E/AndroidRuntime(595):  at com.rentfaster.utilities.ImageLoader.decodeFile(ImageLoader.java:161)
    06-28 10:53:36.836: E/AndroidRuntime(595):  at com.rentfaster.utilities.ImageLoader.getBitmap(ImageLoader.java:94)
    06-28 10:53:36.836: E/AndroidRuntime(595):  at com.rentfaster.handler.DetailPhotoHandler.imagefecher(DetailPhotoHandler.java:211)
   06-28 10:53:36.836: E/AndroidRuntime(595):   at com.rentfaster.handler.DetailPhotoHandler.characters(DetailPhotoHandler.java:153)
   06-28 10:53:36.836: E/AndroidRuntime(595):   at org.apache.harmony.xml.ExpatParser.text(ExpatParser.java:165)
   06-28 10:53:36.836: E/AndroidRuntime(595):   at org.apache.harmony.xml.ExpatParser.appendBytes(Native Method)
  06-28 10:53:36.836: E/AndroidRuntime(595):    at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:518)
  06-28 10:53:36.836: E/AndroidRuntime(595):    at or g.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:479)
  06-28 10:53:36.836: E/AndroidRuntime(595):    at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:318)
 06-28 10:53:36.836: E/AndroidRuntime(595):     at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:275)
  06-28 10:53:36.836: E/AndroidRuntime(595):    at com.rentfaster.home.PropertyDetail$Photostask.doInBackground(PropertyDetail.java:1174)
  06-28 10:53:36.836: E/AndroidRuntime(595):    at com.rentfaster.home.PropertyDetail$Photostask.doInBackground(PropertyDetail.java:1)
  06-28 10:53:36.836: E/AndroidRuntime(595):    at android.os.AsyncTask$2.call(AsyncTask.java:185)
  06-28 10:53:36.836: E/AndroidRuntime(595):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
  06-28 10:53:36.836: E/AndroidRuntime(595):    ... 4 more
4

3 に答える 3

1

同じ問題に関する私の答えを見ることができます。

さらにサポートが必要な場合は、お知らせください。

ありがとうございました :)

アップデート:

以下を使用しました:

BitmapFactory.decodeStream(new FileInputStream(f),null,o);

このメソッドはビットマップを作成し、ビットマップを返します。そのビットマップをキャッチしていません。

次のようなものを使用する必要があります。

Bitmap bmp = BitmapFactory.decodeStream(new FileInputStream(f),null,o);

最初にすべてのオプションを作成してから、decodeStream()メソッドを呼び出す必要があります。このメソッドを呼び出した後にオプションを作成しても効果はありません。

オプションを使用しましたが、次のように、使用できるすべての可能なオプションを常に使用するようにしてください。

options.inScaled = true;
options.inPurgeable = true;

// to scale the image to 1/8
options.inSampleSize = 8;

bitmap.recycle()ビットマップを使用したらすぐにメソッドを呼び出してください。

これらの解決策がすべてうまくいかない場合は、私が提案したように、MAT for eclipseプラグインを使用してください。コードでメモリ リークが発生する可能性があるからです。

于 2012-06-28T05:39:43.297 に答える
0

このような理由でエラーが発生...

06-28 10:53:36.836: E/AndroidRuntime(595): 原因: java.lang.OutOfMemoryError: ビットマップ サイズが VM の予算を超えています

リンクをチェック

リンク2

それはあなたを助けます。

ありがとう

于 2012-06-28T05:33:40.877 に答える
0

メモリ リークが発生しているようです。アクティビティのビットマップは、アクティビティへの相互参照があるため、ガベージ コレクターによって適切に割り当て解除されません。adb shell dumpsys meminfoコマンドを使用してヒープ使用量を監視してみてください

于 2012-06-28T05:40:35.870 に答える