说明
文章首发于HURUWO的博客小站,本平台做同步备份发布。
如有浏览或访问异常图片加载失败或者相关疑问可前往原博客下评论浏览。
原文链接 安卓实战简单新闻客户端7直接点击即可前往访问。
更多技术文章访问本人博客HuRuWo的技术小站,包括Android 逆向 app,闲鱼爬虫 微信爬虫 抖音爬虫 群控 等相关知识
问题描述:
在尝试下拉加载更多的时候,前面几次都能正常加载。但是到第五次的时候开始出现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