减小内存中view对象的建立个数(明显提升效率)
复用历史缓存的view对象,减小Android内存消耗java
减小子孩子(子控件)的查询次数(控件较少时提升不明显,大概5%)
findviewbyid查询比较费时,只查找一次,找到后存起来sql
分批分页加载数据(避免数据过多形成内存不足)缓存
1.直接利用sql语句查询若干条数据,limit 数据量,offset 从哪开始ide
例如:select xx,xx from xxx order by _id desc limit ? offset ?
2.当listview滚动到最后时候再加载offset个数据
1.为listview注册滚动事件的监听
2.onScrollStateChanged:三种状态
1.在空闲状态(idle)时候判断listview的滚动位置
2.getLastPOsition
3.新来的数据加到原来的后面
3.滚动到最后的时候要提示用户数据已经所有加载完成了了,同时不在查询
4.分页:当数据量特别大的时候,能够将数据分红若干页。一页加载完了,就直
接后一页就 覆盖前一个,使用同一个集合便可布局
//使用listView.setAdapter(new MyAdapter()); class MyAdapter extends BaseAdapter { //一共有多少个item,必定要写 @Override public int getCount() { return infos.size(); } // 有多少个条目被使用,就调用多少次 @Override public View getView(final int position, View convertView, ViewGroup parent) { View view; ViewHolder viewHolder; //判断是否能够复用 if (convertView == null) { Log.i(TAG, "建立新的view对象:" + position); // 把一个布局文件转化成 view对象。 viewHolder = new ViewHolder(); view = View.inflate(getApplicationContext(),R.layout.list_item_callsms, null); viewHolder.tv_number = (TextView) view.findViewById(R.id.tv_black_number); viewHolder.tv_mode = (TextView) view.findViewById(R.id.tv_block_mode); viewHolder.iv_delete = (ImageView) view.findViewById(R.id.iv_delete); //当第一次找到控件的时候找到他们的引用,存放在记事本,放在父亲的口袋 view.setTag(viewHolder); } else { // 复用原来的代码 view = convertView; //取出存放的引用 viewHolder = (ViewHolder) view.getTag(); } //数据绑定 viewHolder.tv_number.setText(infos.get(position).getNumber()); String mode = infos.get(position).getMode(); if ("1".equals(mode)) { viewHolder.tv_mode.setText("拦截短信"); } else if ("2".equals(mode)) { viewHolder.tv_mode.setText("拦截电话"); } else { viewHolder.tv_mode.setText("电话短信所有拦截"); } return view; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } } /** * 减小子孩子(子控件)的查询次数,findviewbyid查询比较费时, * 只查找一次,找到以后作一个标记,(记事本)把对应的关系记录下来 * view对象的容器 记录孩子的内存地址。 至关于一个记事本 */ static class ViewHolder { TextView tv_number; TextView tv_mode; ImageView iv_delete; }