1.使用FragmentStateAdapter 来保证内存最多保存三个Fragment来减少内存增长
2.对于快速滑动的RecyclerView通过滑动系统配比来降低滑动速度
public class TvRecyclerView extends RecyclerView {
private static final String TAG = "TvRecyclerView";
private int position;
private double scale = 0.5; //抛掷速度的缩放因子
@Override
public boolean fling(int velocityX, int velocityY) {
velocityX *= scale;
return super.fling(velocityX, velocityY);
}
3.在getView禁止操作计算的东西
比如服务器的一个url图片,在客户端需要转换
String url=Util.change(Url.250,img);
这种操作如果放到getView里面会计算特别多。绘制会有问题,
所以直接放到数据源那里就可以了
4.View.setViewsiable
设置控件是否显示一定要判断
/**
* 设置当前是否需要隐藏
*
* @param view
* @param visibility
*/
public static void setViewVisibility(View view, @ViewHolder.Visibility int visibility) {
if (view != null && view.getVisibility() != visibility) {
view.setVisibility(visibility);
}
}
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState != RecyclerView.SCROLL_STATE_IDLE) {
return;
}
}
/**
* 根据滑动监听加载图片
*
* @param newState
*/
private void dependOnScrollLoadPic(int newState) {
switch (newState) {
case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:
iImageUtil.resumeLoadImage();
break;
case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
iImageUtil.pauseLoadImage();
break;
case AbsListView.OnScrollListener.SCROLL_STATE_FLING:
iImageUtil.pauseLoadImage();
break;
}
}
if (!imgUrl.equals(holder.vItem.getImg().getTag())) {
holder.vItem.getImg().setTag(imgUrl);
holder.vItem.setImg(imgUrl);
}