【问题标题】:Bitmap memory leak in ListView population, androidListView人口中的位图内存泄漏,android
【发布时间】:2011-12-30 18:29:13
【问题描述】:

我讨厌发布多余的问题,但我一生都无法弄清楚如何在堆上没有过多的位图内存。它在第一次 onCreate 时完美膨胀,但第二次失败。我在哪里/何时回收这些东西,@_o lol

我基本上使用的是位图数组列表,将其设置为具有自定义行布局的适配器,覆盖 getView。

**所使用的位图是来自 SD 卡的 jpeg // 基本上是一个垂直滚动的画廊。

       mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        setListAdapter(getAdapter());
    }//on create


    private ArrayAdapter<Bitmap> getAdapter(){
        ArrayList<Bitmap> picsII = new ArrayList<Bitmap>();
        String DIRECTORY_PATH = "/sdcard/Mustaches/";
        File file = new File(DIRECTORY_PATH);
        final String[] s = file.list();

        for(int i = 0; i<s.length; i++){
            Bitmap b = BitmapFactory.decodeFile(DIRECTORY_PATH + s[i]);
            picsII.add(b);
        }
        adapter = new ArrayAdapter<Bitmap>(this, R.layout.row, picsII){

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
            View row;

            if (null == convertView) {
            row = mInflater.inflate(R.layout.row, null);
            } else {
            row = convertView;
            }


            ImageView iv = (ImageView) row.findViewById(R.id.imageView_row);
            iv.setImageBitmap(getItem(position));

            //some other widgets such as buttons and textviews
            //from the custom row are inflated here


            return row;
            }
        };

        return adapter;
    };

【问题讨论】:

  • 所以失败是内存不足错误?
  • 是的,outOfMemoryError:位图超出虚拟机预算(heapSize=5639 Allocated=3052 bitmapSize=27141)

标签: android memory-leaks bitmap listactivity listadapter


【解决方案1】:

您的问题是您急切地加载所有位图,而您可能一次只显示几个位图。

也就是说,您在显示任何位图之前将所有位图解码为一个数组。这很容易耗尽你所有的内存。

您要使用的方法只是为正在显示的ListView 行加载图像。

查看这篇文章以获得更好的解决方案,该解决方案涉及在后台线程中加载图像并维护缓存。

http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 2012-11-19
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    相关资源
    最近更新 更多