当前位置: 代码迷 >> Android >> Android, BaseAdapter 处置大数据量时的优化
  详细解决方案

Android, BaseAdapter 处置大数据量时的优化

热度:93   发布时间:2016-05-01 13:37:59.0
Android, BaseAdapter 处理大数据量时的优化

Android优化 最常见的就是ListView, Gallery, GridView, ViewPager 的大数据优化? 图片优化? 访问网络的优化
优化的原则: 数据延迟加载? 分批加载? 本地缓存
数据优化 ? 1).复用contentview??
? ? ? ? ? ? ? ? ?2).创建static class ViewHolder
?????????????????3).分批加载 滑动监听 或者按钮? 显示更多数据? 往下拖动 显示

?

图片优化 ?1).异步加载??
? ? ? ? 2).本地缓存(二级缓存? 内存(软引用实现),sd卡)??
? ? ? ? ? ? ? ? 3).快速滑动时不显示图片
? ? ? ? ? ? ? ? 4).分为核心线程池和普通线程池,下载图片等耗时任务放置在普通线程池

?

异步加载 ?AsynTask android 封装好的异步数据获取,包括三个方法
? ? ? ? ? ? ? ?doInBackground 执行在子线程中的异步方法
? ? ? ? ? ? ? ?onProgressUpdate 数据获取之后 执行的方法,在主线程中可以在这里更新UI界面
? ? ? ? ? ? ? ?onPostExecute?? 异步方法执行前,可以进行界面友好提示 在主线程中执行的方法
? ? ? ? ? ? ? ?也可以自己封装一个任务类(子线程)thread?? 采用线程池 这里需要自己维护一个任务列表,并且做到任务的优先级

?

对Adapter 优化的代码:

?

public class HolderAdapter<E> extends AbstractAdapter<E> {		public HolderAdapter(LayoutInflater inflater, ViewCreator<E> creator) {		super(inflater, creator);	}		private static class ViewHolder{		public View view;	}	@Override	public View getView(int position, View convertView, ViewGroup parent) {		// Holder View模式实现		if (convertView == null) {			ViewHolder holder = new ViewHolder();			convertView = mCreator.createView(mInflater, position,getItem(position));			holder.view = convertView;			convertView.setTag(holder);		} else {			ViewHolder holder = (ViewHolder) convertView.getTag();			//释放当前的View的数据			mCreator.releaseView(convertView,  getItem(position));			//将新数据更新到HodlerView中			mCreator.updateView(holder.view, position, getItem(position));		}		return convertView;	}}
?
  相关解决方案