您的位置:首页 > 其它

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的布局嵌套层次过深。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: