上一篇记录了使用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;
}

[android] 手机卫士黑名单功能(ListView优化)的更多相关文章

  1. [android] 手机卫士黑名单功能(列表展示)

    先把要拦截的电话号码保存到数据库中,拦截模式用个字段区分,1 电话拦截,2 短信拦截,3全部拦截 新建Activity类CallSmsSafeActivity.java 新建布局文件activity_ ...

  2. [android] 手机卫士黑名单功能(短信拦截)

    前面我们把需要拦截的手机号都存储和展示出来了,接下来是使用广播接收者拦截短信了,这个广播接收者需要和一个服务绑定,服务开启的时候,接收者存在,服务停掉时,接收者关闭 在service包下定义一个类Ca ...

  3. android手机卫士、3D指南针、动画精选、仿bilibli客户端、身份证银行卡识别等源码

    Android精选源码 android身份证.银行卡号扫描源码 android仿bilibili客户端 android一款3D 指南针 源码 android手机卫士app源码 android提醒应用, ...

  4. Android 手机卫士--参照文档编写选择器

    本文来实现<Android 手机卫士--导航界面1的布局编写>中的图片选择器部分的代码. 本文地址:http://www.cnblogs.com/wuyudong/p/5944356.ht ...

  5. Android 手机卫士--设置界面&功能列表界面跳转逻辑处理

    在<Android 手机卫士--md5加密过程>中已经实现了加密类,这里接着实现手机防盗功能 本文地址:http://www.cnblogs.com/wuyudong/p/5941959. ...

  6. Android 手机卫士--确认密码对话框编写

    本文接着实现“确认密码”功能,也即是用户以前设置过密码,现在只需要输入确认密码 本文地址:http://www.cnblogs.com/wuyudong/p/5940718.html,转载请注明出处. ...

  7. Android 手机卫士--签名文件说明&包名说明

    在<Android 手机卫士--打包生成apk维护到服务器>一文中,实现了新版本的apk到服务器,当打开客户端apk的时候,发现有新版本,提示更新.还实现了利用xutils工具实现了从服务 ...

  8. Android 手机卫士--弹出对话框

    在<Android 手机卫士--解析json与消息机制发送不同类型消息>一文中,消息机制发送不同类型的信息还没有完全实现,在出现异常的时候,应该弹出吐司提示异常,代码如下: private ...

  9. Android 手机卫士--阶段小结1

    本文地址:http://www.cnblogs.com/wuyudong/p/5904528.html,转载请注明源地址. 本文对之前手机卫士开发进行一个小结. 1.SplashActivity 版本 ...

  10. Android 手机卫士--安装过程中点击回退按钮

    本文地址:http://www.cnblogs.com/wuyudong/p/5903707.html,转载请注明源地址. 在手机卫士之前的版本升级的对话框中: 有的用户暂时不想更新,没有点击“稍后再 ...

随机推荐

  1. 应用于电力电子变压器的双向DC_DC变换器综述(学习笔记)

    PET(Powerelectronictransformer):电力电子变压器 PET所具有的优点: (1)体积小.重量轻.无变压器油的污染: (2)具备功率因数调节能力,减小电网谐波污染: (3)能 ...

  2. 2D Polygons( Poygon) CGAL 4.13 -User Manual

    1 Introduction A polygon is a closed chain of edges. Several algorithms are available for polygons. ...

  3. 从B站、爱奇艺、映客的IPO上市,看国内视频公司的内容审核现状

    本文由  网易云发布. 3月30日,中央电视台<经济半小时>栏目讲述了网络上的一个顽症——色情内容.在这期主题为<互联网上的“色诱”>的节目中,央视的记者揭示了色情直播的猖獗. ...

  4. scapy IPv6 NS NA报文构造

    NS 报文构造: #! /bin/python from scapy.all import * a=IPv6(src='2a01:4f8:161:5300::40', dst='ff02::1:ff0 ...

  5. Django 定时任务实现(django-crontab+command)

    一.编写自定义django-admin命令 注:利用django-admin自定义命令我们可以ORM框架对model进行操作,如:定时更新数据库,检测数据库状态..... Django为项目中每一个应 ...

  6. poj1017----模拟

    题目大意: 现有1*1,2*2,3*3,4*4,5*5,6*6规格的产品若干个(高度都为h),问最少需要多少个 6*6*h的箱子把这些产品都装完 输入:每组测试数据共6个整数,分别代表1*1,...6 ...

  7. linux下tomcat运行war包常用命令

    一.先是war包copy到 linux 的相关目录,我这的是/opt/soft/tomcat_ecp/webapps. 如果是老项目,在导入war的之前,习惯上是把之前的war备份一下, 如 mv p ...

  8. C# 证书打印《六》

    整理思路,从新出发. 加载模版 public void loadtemplate(Label lable) { string p_tempateFile = @"fomate.xml&quo ...

  9. python学习笔记03-用户输入

    name=Input(“your name”)  此处接受的数据类型为字符串 整数转字符串  str(123) 整数转字符串  int(“123”)

  10. 【jxoi2018】游戏 组合数学

    首先令$n=r-l+1$. 令$k$表示区间$[l,r]$中存在多少个数$x$,使得$x$不存在小于$x$且在区间$[l,r]$中的因数,我们把包含这些数的数集称为$S$ 我们来先想一个$O(nk)$ ...