ListView滑动流畅性优化
2016-04-09 16:58
393 查看
自定义Adapter
public View getView(final int position,
ViewconvertView,
ViewGroupparent)
1、 布局视图复用
ListView中的getView原理
• 工作原理:
ListView 针对List中每个item,要求 adapter “给我一个视图” (getView)。
如果我们有上亿个项目要显示怎么办?为每个项目创建一个新视图?NO!
实际上Android为你缓存了视图。有个叫做Recycler的构件
Void getView(final int position, ViewconvertView, ViewGroup
parent){
View myView = convertView;
ViewHolder viewHolder = null;
if (myView == null) {
viewHolder = new ViewHolder();
myView = initChatView(
viewHolder, type,parent); // bad findViewById !
myView.setTag(viewHolder);
} else {
viewHolder =(ViewHolder) myView.getTag();
}
//复杂逻辑······
}
2、Mask复用
public void onMaskChanged(String key,Bitmap newMask) {
// TODO Auto-generated method stub
if(maskMap == null){
maskMap = new HashMap<String, Bitmap>();
}
maskMap.put(key, newMask);
}
public Bitmap getMask(String key) {
// TODO Auto-generated method stub
if(maskMap != null){
return maskMap.get(key);
}else{
return null;
}
}
3、优化getView中的算法
• 每次滑动ListView列表控件都会触发连续的getView操作
• 如果感觉滑动时很卡,从下面查找原因:
(1)getView中的计算时间过长(如大量使用
findViewById来查找子控件等)。
(2)getView中发生了内存泄漏,导致滑动列表时
内存占用急剧增加,直至ANR发生。
(3)没有复用回收的view。
(4)单个item的布局嵌套层次过深。
public View getView(final int position,
ViewconvertView,
ViewGroupparent)
1、 布局视图复用
ListView中的getView原理
• 工作原理:
ListView 针对List中每个item,要求 adapter “给我一个视图” (getView)。
如果我们有上亿个项目要显示怎么办?为每个项目创建一个新视图?NO!
实际上Android为你缓存了视图。有个叫做Recycler的构件
Void getView(final int position, ViewconvertView, ViewGroup
parent){
View myView = convertView;
ViewHolder viewHolder = null;
if (myView == null) {
viewHolder = new ViewHolder();
myView = initChatView(
viewHolder, type,parent); // bad findViewById !
myView.setTag(viewHolder);
} else {
viewHolder =(ViewHolder) myView.getTag();
}
//复杂逻辑······
}
2、Mask复用
public void onMaskChanged(String key,Bitmap newMask) {
// TODO Auto-generated method stub
if(maskMap == null){
maskMap = new HashMap<String, Bitmap>();
}
maskMap.put(key, newMask);
}
public Bitmap getMask(String key) {
// TODO Auto-generated method stub
if(maskMap != null){
return maskMap.get(key);
}else{
return null;
}
}
3、优化getView中的算法
• 每次滑动ListView列表控件都会触发连续的getView操作
• 如果感觉滑动时很卡,从下面查找原因:
(1)getView中的计算时间过长(如大量使用
findViewById来查找子控件等)。
(2)getView中发生了内存泄漏,导致滑动列表时
内存占用急剧增加,直至ANR发生。
(3)没有复用回收的view。
(4)单个item的布局嵌套层次过深。
相关文章推荐
- JAVA基础--日期处理
- JdGrid树形表格分页
- 环形队列的实现原理
- Swift之 ? 和 !
- 【VLC核心一】播放流程梳理->live555收流+ffmpeg:AVCodec解码
- 算法导论----<递归插入>及实例
- js测试
- 电梯调度问题之成长总结篇(二)
- Myeclipse里导入jQuery.js 时出现错误打红叉的解决方法
- Linux就这个范儿 第16章 谁都可以从头再来--从头开始编译一套Linux系统 nsswitch.conf配置文件
- c/c++字符、字符串输入输出
- 转发 重定向
- C语言求向量和的两则问题解答分享
- 使用Java语言编写一款日记软件
- JavaScript基础之函数与数组
- psr-4
- MySQL(help?)
- Git 2.0 更改 push default 为‘simple’
- Java 爬虫 菜逼教程 00
- CGAL编译与配置