2012-05-07 6 views
1

ウェブサイトから画像をダウンロードして、リストビューに添付しています。複数の画像をリストビューに読み込めないのはなぜですか?

URL aURL; 
     try { 
       aURL = new URL(//"http://www.orientaldaily.com.my/"+ 
         imagepath[i]); 
       URLConnection conn = aURL.openConnection(); 
       conn.connect(); 
       InputStream is = conn.getInputStream(); 
       BufferedInputStream bis = new BufferedInputStream(is); 
       Bitmap bm = BitmapFactory.decodeStream(bis); 
       bis.close(); 
       is.close(); 

       imageview = (ImageView) findViewById(R.id.image_alllatestnewstitle); 
       imageview.setVisibility(View.VISIBLE); 
       imageview.setScaleType(ScaleType.CENTER_CROP); 
       imageview.setImageBitmap(bm); 
      } catch (IOException e) { 
       Log.e("DEBUGTAG", "Remote Image Exception", e); 
      } 

私が1枚の画像をダウンロードしても、問題はありませんが、複数の画像をダウンロードしてリストビューに読み込むと問題が発生します。

問題は、この問題を回避する方法

bitmap size exceeds VM budget 

でしたか?

注:これは質問と重複していません。

ありがとうございました。

+0

明らかな理由は、画像が大きすぎてモバイルが不足していることです。 –

+2

はhttp://stackoverflow.com/questions/8904493/android-outofmemory-error-on-bitmap-creationこの質問はあなたに役に立ちます – idiottiger

+0

[** ListViewでの画像のレイジー読み込み**]を実装するだけですhttp://stackoverflow.com/a/3068012/379693) –

答えて

1

多くの画像を読み込むと、アプリがメモリ不足になり、強制終了します。これはアプリケーションに起こっていると思います。メモリの問題はアプリケーション開発中の複雑な問題です。手動でクリアすることで解決できます未使用のビットマップとガベージコレクタを使用します。

  • System.gc()を使用してください。

  • )(

  • Bitmap.recycleを使用してビットマップをリサイクルしてみてください。

  • すべての未使用ビットマップをnullにします。

  • すべての未使用メモリの割り当てを解除します。

これは、すべてあなたに大いに役立つし、また、それはあなたの割り当てを解除メモリを見つけるのに役立ちます。このlink .USEメモリ・アナライザを通過>コードのこの作品は役立つかもしれない。このlink

public void deAllocateAllMemory() 
{ 
    try 
    { 


     mGallery.imgLoader1.disposeImages(); 
     unbindDrawables(findViewById(R.id.magazineGrid)); 
     mGallery=null; 

     back.getBackground().setCallback(null); 
     back.setOnClickListener(null); 
     store.getBackground().setCallback(null); 
     store.setOnClickListener(null); 
     quickAction.setOnActionItemClickListener(null); 
     settings.getBackground().setCallback(null); 
     settings.setOnClickListener(null); 
    } 
    catch (Exception e) 
    { 
    } 

} 

private void unbindDrawables(View view) { 
    if (view.getBackground() != null) { 
     try { 
      view.getBackground().setCallback(null); 
      ((BitmapDrawable) view.getBackground()).getBitmap().recycle(); 
      view.destroyDrawingCache(); 
      view.notifyAll(); 
     } catch (Exception e) { 
     } 

    } 

をしようとしますあなたはリルビット。

関連する問題