問題描述:
在嘗試下拉加載更多的時候,前面幾次都能正常加載。但是到第五次的時候開始出現Fatal signal 11 (SIGSEGV) at 0x000007c4 (code=1)
,並退出了程序。
經過查詢Fatal signal 11 (SIGSEGV) at 0x000007c4 (code=1)
是指程序訪問了私有的內存地址,也就是內存泄露。
OOM是導致Fatal signal 11 (SIGSEGV) at 0x000007c4 (code=1)
的一種原因。到底是不是還需要驗證一下。
問題驗證:
通過去除顯示圖片的控件,既listview item不加載圖片後。程序運行正常,不會導致Fatal signal 11 (SIGSEGV) at 0x000007c4 (code=1)
由此證明是異步圖片加載控件過多,導致OOM。
具體參考:Fatal signal 11 (SIGSEGV) at 0x000007c4 (code=1)
問題解決:
全局只需要一個RequestQueue和 ImageLoader ,之前的每一個NetworkImageView都開了一個RequestQueue和 ImageLoader,導致OOM。只需要移出來即可。
public class NewAdapter extends ArrayAdapter<News> {
//全局定義一個即可,volley建議定義在baseactivity裏面
RequestQueue mQueue = Volley.newRequestQueue(getContext());
ImageLoader imageLoader = new ImageLoader(mQueue, new ImageLoader.ImageCache() {
@Override
public void putBitmap(String url, Bitmap bitmap) {
}
@Override
public Bitmap getBitmap(String url) {
return null;
}
});
private int resourceID;
public NewAdapter(Context context, int textviewresourceid, List<News> object) {
super(context, textviewresourceid, object);
resourceID = textviewresourceid;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
News news = getItem(position);//獲取當前項的wanwan實例
View view;
ViewHolder viewHolder;
if (convertView == null) {
view = LayoutInflater.from(getContext()).inflate(resourceID, null);//獲取view實例
viewHolder = new ViewHolder();
viewHolder.networkImageView=(NetworkImageView) view.findViewById(R.id.news_pic);
viewHolder.textView1 = (TextView) view.findViewById(R.id.text_title);
viewHolder.textView2 = (TextView) view.findViewById(R.id.text_content);
view.setTag(viewHolder);
} else {
view = convertView;
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.textView1.setText(news.getTitle());
viewHolder.textView2.setText(news.getDescription());
Log.d("PIC", news.getPicurl());
// RequestQueue mQueue = Volley.newRequestQueue(getContext());
// ImageLoader imageLoader = new ImageLoader(mQueue, new ImageLoader.ImageCache() {
// @Override
// public void putBitmap(String url, Bitmap bitmap) {
// }
// @Override
// public Bitmap getBitmap(String url) {
// return null;
// }
// });
viewHolder.networkImageView.setDefaultImageResId(R.mipmap.ic_launcher);
viewHolder.networkImageView.setErrorImageResId(R.mipmap.ic_launcher);
viewHolder.networkImageView.setImageUrl(news.getPicurl(),
imageLoader);
return view;
}
class ViewHolder {
TextView textView1;
TextView textView2;
NetworkImageView networkImageView;
}
}
這樣這個demo就算告一段落,下載地址:
https://github.com/HuRuWo/SimpleNews/tree/e322fefc6cdd6560c2bf5e825c3a6d1f114a9a0f