ListView滑动流畅性优化

自定义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的布局嵌套层次过深。

 

 

 

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值