2019上半年android项目中的性能优化

一 卡顿问题

1.1  ListView的ItemView中使用了getViewTreeObserver().addOnPreDrawListener

在实际生产中发现列表快速滑动的掉帧非常厉害,但是无论通过FPS的检测以及method profile的测量此时的主线程都不应该卡顿。后面通过分析发现该列表页面的itemView中有如下一种代码:

   viewHolder.textView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {

    @Override

    public boolean onPreDraw() {

          viewHolder.textView.getViewTreeObserver().removeOnPreDrawListener(this);

          。。。。。。。。。。

          return false;

   }

});

当ListView的某个item满足一定条件时就会进入上述这种代码,他会监听ViewTreeObserver的“OnPreDrawListener”,同时可能会返回false。

注意当这个函数返回false的时候,整个页面会skip掉本次的draw动作,注意是整个activity对应的DecoreView都不会在这次绘制时钟周期中绘制。因此当页面快速滑动的过程中,某些时机这个方法返回false页面不绘制,自然让人感觉到掉帧的出现

 

1.2   ListView中嵌套RecyclerView

在项目有这样的实现ListView中某个item是一个垂直展示的RecyclerView,RecyclerView的高度是WrapContent的,这样实现的话展示上看上去是没有问题的。但是在滑动的过程中我们会发现当滑动到RecyclerView区域时,页面变的很难滑动,滑起来很费力。经过分析这个也不是FPS低造成的,是由于这块区域的RecyclerView的事件处理和ListView时间产生了冲突,造成用户的滑动手势不灵敏。

解决的方案是禁用RecyclerView的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值