1.利用ListView自身的缓存机制,他会缓存条目中的一个条目item,当listview第一屏显示完成之后,就会出现一个缓存条目,其实就是BaseAdapter里面的public View getView(int position, View convertView, ViewGroup parent)。
2.减少findViewById()的次数,findViewById是一个相对比较耗性能的操作,因为这个操作每次都需要到布局中去查找文件。把item里面的控件封装成一个javaBean,当item条目被加载的时候就去找到对应的控件。
@Override 146 public View getView(int position, View convertView, ViewGroup parent) { 147 // TODO Auto-generated method stub 148 View view = null; 149 ViewHolder holder = null; 150 if (convertView != null) { 151 view = convertView; 152 holder = (ViewHolder) view.getTag(); 153 Log.i("i", " convertView != null 缓存不等于空 使用缓存"); 154 155 } else { 156 Log.i("i", " convertView == null 缓存等于空"); 157 view = mInflater.inflate(R.layout.app_lock_manager_item, null); 158 holder = new ViewHolder(); 159 holder.iv_appicon = (ImageView) view.findViewById(R.id.iv_appicon); 160 holder.tv_appname = (TextView) view.findViewById(R.id.tv_appname); 161 holder.iv_lock = (ImageView) view.findViewById(R.id.iv_lock); 162 view.setTag(holder); 163 } 164 AppInfo appInfo = appInfos.get(position); 165 166 ImageView iv_appicon = holder.iv_appicon; 167 TextView tv_appname = holder.tv_appname; 168 ImageView iv_lock = holder.iv_lock; 169 170 iv_appicon.setImageDrawable(appInfo.getApp_icon()); 171 tv_appname.setText(appInfo.getApp_name()); 172 173 // boolean isLockApp = appLockDao.isLockApp(appInfo.getPackagename()); 174 boolean isLockApp = appLocks.contains(appInfo.getPackagename()); // 此功能优化后 不用每次查询数据库 直接将所有有锁的程序都放入集合中存储 175 if(isLockApp){ 176 iv_lock.setImageResource(R.drawable.lock); 177 }else{ 178 iv_lock.setImageResource(R.drawable.unlock); 179 } 180 181 return view; 182 } 183 184 } 185 186 static class ViewHolder{ 187 ImageView iv_appicon; 188 TextView tv_appname; 189 ImageView iv_lock; 190 }