面试题DAY3--recycleview 滑动卡顿

1.recyclerview的item加载顺序

recyclerview的使用大家肯定不陌生了,但是每个item的加载顺序还是有必要了解一下的,知道item显示出来的流程。

getItemViewType(获取显示类型,返回值可在onCreateViewHolder中拿到,以决定加载哪种ViewHolder)

onCreateViewHolder(加载ViewHolder的布局)

onViewAttachedToWindow(当Item进入这个页面的时候调用)

onBindViewHolder(将数据绑定到布局上,以及一些逻辑的控制就写这啦)

onViewDetachedFromWindow(当Item离开这个页面的时候调用)

onViewRecycled(当Item被回收的时候调用)

2.复杂布局

好多文章都说过这个办法,的确是有效,但是这个效果也就因人而异吧,我的只能说是缓解了一点点的卡顿,

对于列表来说,不管用RecyclerView 还是ListView,我们都会用ViewHolder来复用布局。但是,即使这样做了,还是会出现卡顿,。

1.尽量减少布局嵌套,层级越深,每次测量时间久越久。
2. 如果布局很复杂,可以考虑自定义布局能不能实现。
3.尽量减少过度绘制区域。这个可以在开发者选项中看到:调试GPU过度绘制。

我们对于滚动过程中,卡顿的判断可以打开手机开发者选项中的:GPU呈现模式分析->在屏幕上显示为条形图。就可以非常直观的看到滑动过程中有没有卡顿了。

 

3.优化图片加载

我在别的文章中看到并且用在了自己的软件中,图片加载的优化是最有效的办法,而且很多主流的app中新浪微博,qq,今日头条等也在使用,因为列表在滚动过程中,如果布局很复杂,样式也很多,那就需要考虑滚动的时候不做复杂布局及图片的加载,尽量减少滚动过程中的耗时操作,这样滚动停止的时候再加载可见区域的布局,因为这个时候是停止状态,即使略微耗时一些用户的感知也是比较小的,就会给人一种不卡的假象。

面试题DAY3--recycleview 滑动卡顿

从代码中可以看到主要就是对onScrollStateChanged方法进行监听,然后通知adapter是否加载图片或复杂布局。

 

如果有不熟悉 onScrollStateChanged 方法的朋友可以看一下下面的介绍

void onScrollStateChanged(RecyclerView recyclerView, int newState)中回调两个变量:

recyclerView : 当前在滚动的RecyclerView

newState : 当前滚动状态.

其中newState有三种值:

?

1

2

3

4

5

6

7

8

<code><code>//正在滚动

public static final int SCROLL_STATE_IDLE = 0;

 

//正在被外部拖拽,一般为用户正在用手指滚动

public static final int SCROLL_STATE_DRAGGING = 1;

 

//自动滚动开始

public static final int SCROLL_STATE_SETTLING = 2;</code></code>

下面是我适配器里的方法

 

 

面试题DAY3--recycleview 滑动卡顿

在adapter中定义一个boolean类型的变量。通过recycleview的onScrollStateChanged的方法来对这个boolean值进行改变,从而控制加载