Android viewpager与fragment切换刷新引起的ANR

问题描述:切换底部的tab页,每次切换tab页都会刷新页面数据,反复操作就会出现ANR。

bug日志:

ANR in com.jieyue.jieyue (com.jieyue.jieyue/.ui.activity.MainActivity)
PID: 29494
Reason: Input dispatching timed out (Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered to it over 500.0ms ago.  Wait queue length: 6.  Wait queue head age: 28986.1ms.)

问题分析: 从上述日志我们可以分析出,在我们触摸窗口的时候,页面不能及时响应,大概需要等待28986.1ms。我们都知道在Android中Activity的最长执行时间是5s,BroadcastReceiver的最长执行时间则是10秒。超过这段时间不能响应就会出现ANR提示,带给用户不好的体验。

解决方案:(我们都知道这是由于每次切换tab页面都会重新发送请求,导致请求过多需要排队不能及时响应。那下面我们就来了解一下ViewPager页面的预加载机制)

认识ViewPager页面预加载机制

viewPager的页面缓存机制默认是俩个。

mViewPager.setOffscreenPageLimit(3);

在空闲状态下,设置在视图层次结构中当前页的任意一侧应该保留的页数。超过此限制的页面将在需要时从适配器重新创建。我们一共有4个tab页,所以我们为3就可以了。

 

 

 

                          

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值