ViewPager的setCurrentItem数值过大导致ANR异常

本文介绍了在Android开发中使用ViewPager实现无限轮播时遇到的ANR异常问题及解决方案。通过调整ViewPager的初始位置,避免了因测量页数过大而导致的主线程阻塞。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天Android的同事妹子在做无限循环Banner图的时候遇到一个问题,就是设置好数据啊什么的运行的时候界面卡死,显示ANR异常,后来发现是她把ViewPager的初始位置setCurrentItem(Integer.MAX_VALUE / 2)导致的,后来想为什么设置的数值大了会发生ANR异常。看了下源码:

if (mFirstLayout) {
     // We don't have any idea how big we are yet and shouldn't have any pages either.
     // Just set things up and let the pending layout handle things.
     mCurItem = item;
     if (dispatchSelected) {
         dispatchOnPageSelected(item);
     }
     requestLayout();
 } else {
     populate(item);
     scrollToItem(item, smoothScroll, velocity, dispatchSelected);
 }

为了能够实现ViewPager的近似无限轮播效果,同事将viewPager的限制页数设置为Integer类型的最大值的一半,但也从而会使ViewPager在setCurrentItem时测量页数太大,绘制UI频繁而阻塞主线程ANR,因此我将数量改成了相对较小些问题便得带了根本的解决。

其实我去年写过另外一种方法实现无限循环的Banner,逻辑麻烦一点,不过真的挺有意思的:
http://blog.youkuaiyun.com/Just_Sanpark/article/details/17436037

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值