上一篇记录了使用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. Python初学手记----在window系统中安装环境

    官网地址: https://www.python.org/ Win版下载地址:https://www.python.org/downloads/windows/ 安装注意:安装路径推荐修改. path ...

  2. C# OleDbConnection对特定部分Excel的数据读取

    最近在写winform程序,先来一个简单的. 读取特定部分Excel的数据读取,读取Excel第30行开始到H列的数据 using System;using System.Collections.Ge ...

  3. [USACO06DEC] 牛奶模式Milk Patterns

    题目链接:戳我 我们知道后缀数组的h数组记录的是后缀i和后缀i-1的最长公共前缀长度,后缀的前缀其实就是子串. 因为是可以重复出现的子串,所以我们只要计算哪些h数组的长度大于等于x即可.这一步操作我们 ...

  4. Python 获取秒级时间戳与毫秒级时间戳

    原文:Python获取秒级时间戳与毫秒级时间戳 1.获取秒级时间戳与毫秒级时间戳 import time import datetime t = time.time() print (t) #原始时间 ...

  5. (2019)OCP 12c 062考试题库出现大量新题-4

    4.Which four are true about creating and running a remote database scheduler jobs? A) A credential i ...

  6. Stack栈类与、Queue队列与线性表的区别和联系

    栈和队列都属于特殊的线性表   一.定义   1.线性表(linear list): 是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列.数据元素是一个抽象的符号,其具体含义在不同的情 ...

  7. Brainteaser-292. Nim Game

    You are playing the following Nim Game with your friend: There is a heap of stones on the table, eac ...

  8. maven配置时mvn不是内部或外部问题解决

    参考这里

  9. php 删除二维数组中某个key值

    /** * 根据key删除数组中指定元素 * @param array $arr 数组 * @param string/int $key 键(key) * @return array */ priva ...

  10. jQuery Validation Plugin

    使用方式很简单,简单测试代码如下: <html> <head> <script type="text/javascript" src="./ ...