gpt4 book ai didi

android - ListView 填充中的位图内存泄漏,android

转载 作者:行者123 更新时间:2023-11-30 04:24:50 25 4
gpt4 key购买 nike

我讨厌发布多余的问题,但我终其一生都想不出如何避免堆上有太多位图内存。它在第一次 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;
};

最佳答案

你的问题是当你可能一次只显示一对时,你急切地加载所有位图。

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

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

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

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

关于android - ListView 填充中的位图内存泄漏,android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8682682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com