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枚だけダウンロードしても問題ありませんが、5枚以上ダウンロードしてリストビューに読み込むと問題が発生します。

問題は

bitmap size exceeds VM budget

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

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

ありがとう。

4

2 に答える 2

1

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

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

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

  • Bitmap.recycle();

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

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

これはすべてあなたを大いに助け、またこのリンクを通り抜けます。メモリアナライザを使用して、割り当て解除されたメモリを見つけるのに役立ちます>このリンクを試してください

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) {
        }

    }

このコードは少し役立つかもしれません。

于 2012-05-07T10:04:03.827 に答える
0

ビットマップを効率的に表示するチュートリアルが役に立ちます。

于 2012-05-07T10:02:26.983 に答える