ListView滑动流畅性优化

来源:互联网 发布:计算机算法与数学模型 编辑:程序博客网 时间:2024/04/30 00:36

自定义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
原创粉丝点击