[android] 手机卫士黑名单功能(ListView优化)详解手机开发
2023-06-13 09:20:13 时间
上一篇记录了使用ListView展示出来了100条数据,当慢慢拖动的时候,不会有问题,但是当拖动很快的时候,应用会报anr错误
查看错误日志,看到报OutOfMemoryError,内存不足
ListView在显示条目的时候,每显示出来一条都会调用一下getView()方法
这个方法里面将xml文件转成View对象非常的消耗资源,要避免频繁调用:
在重写的getView()方法中,会传递进来一个View对象convertView
当手向上拖动ListView的时候,上面隐藏出去一条的条目会保存在convertView对象中,这个convertView对象可以作为xml转换成的目标View对象
此时,创建新的View对象,只会在第一次屏幕展示的时候创建,之后的条目显示,都是使用的之前缓存的View对象
下面调用View对象的findViewById()方法,也非常消耗内存:
在android布局中,是个典型的树结构,在查找控件的时候,需要遍历整个的结构,有可能非常消耗时间
定义一个内部类ViewHolder
定义属性根据业务
在getView()方法中,获取ViewHolder对象
赋值ViewHolder对象的属性,findViewById()查找到的View控件对象
当转换成的View对象创建的时候,调用View对象的setTag()方法,参数:VIewHolder对象
使用View对象的getTag()方法,获取出ViewHolder对象使用
class ViewHolder{ public TextView phoneView; public TextView modeView; private class MyAdapter extends BaseAdapter { @Override public int getCount() { // TODO Auto-generated method stub return infos.size(); @Override public View getView(int position, View convertView, ViewGroup parent) { View view; ViewHolder holder=new ViewHolder(); if(convertView==null){ view = View.inflate(CallSmsSafeActivity.this, R.layout.list_call_sms_safe_item, null); holder.phoneView=(TextView) view .findViewById(R.id.tv_main_phone); holder.modeView=(TextView) view .findViewById(R.id.tv_block_mode); view.setTag(holder); System.out.println("创建新的View对象"+position); }else{ view=convertView; holder=(ViewHolder) view.getTag(); System.out.println("使用历史View对象"+position);
holder.phoneView.setText(infos.get(position).get("phone")); switch (infos.get(position).get("mode")) { case "1": holder.modeView.setText("电话拦截"); break; case "2": holder.modeView.setText("短信拦截"); break; case "3": holder.modeView.setText("全部拦截"); break; default: break; return view; }
5396.html
app程序应用开发手机开发无线开发移动端开发相关文章
- 【Android 逆向】Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )
- Android弹性收缩自适应布局FlexboxLayout详解手机开发
- Android RuntimePermissions运行时权限:批量权限申请详解手机开发
- Android视频播放器屏幕左侧边随手指上下滑动亮度调节变暗变亮原理实现详解手机开发
- Android选择本地图片并裁剪工具类详解手机开发
- Android控制摄像头拍照并对照片进行裁剪详解手机开发
- [android] 轮播图-滑动图片标题焦点详解手机开发
- [android] 绑定方式开启服务&调用服务的方法详解手机开发
- [android] 短信的广播接收者详解手机开发
- [android] 在不同的activity之间传递数据详解手机开发
- [android] 常用数据适配器ArrayAdapter详解手机开发
- [android] listview入门详解手机开发
- [android] 帧布局详解手机开发
- android Titlebar一行代码实现沉浸式效果详解手机开发
- android galley实现画廊效果详解手机开发
- android的详解手机开发
- android动画之interpolator和typeEvaluator用法详解手机开发
- android客户端和服务端js交互详解手机开发
- Android Activity启动流程分析详解手机开发
- Android开发把项目打包成apk详解手机开发
- Android Studio2.3支持构建缓存,以及更多新特性详解手机开发
- Wine On Android将可以在Android上运行Windows程序
- Android中使用include标签和merge标签重复使用布局