RollViewPager
RollViewPager copied to clipboard
Intetr.max
没打全 ... int half = Integer.MAX_VALUE/2; 这一句太阻塞主线程了...
现在还会ANR? 现在应该并不会有过多计算。
只要用integer.max_value 适配页面数据的时候总会卡一段时间的
如何复现?我测试都没问题。
如果只是测试没有问题 但是加到项目里面就可以卡了
所以问你如何复现。你在项目里能复现,demo里就不能复现? 我知道Integer.MAX_VALUE会在计算当前偏移位置时大量循环,但通过反射可以避免这个问题,这个方式也比其他方式优势明显。 多个项目使用这么久并没问题。都是开发者应该知道复现是解BUG第一步。
@Jude95 Integer.MAX_VALUE会在计算当前偏移位置时大量循环,但通过反射可以避免这个问题,你好这个问题能解释下吗
@jimUpdate 我将当前页设为Integer.MAX_VALUE/2,所以前后都有你一辈子都滑不完的页数,加上自己做的页面缓存就完美了。唯一的问题就是如何把页码设置到Integer.MAX_VALUE/2。
ViewPager里setCurrentItem
时会调用setCurrentItemInternal
,然后在‘populate’会进行计算,计算从当前位置到目标位置的偏移量,会获取每一页的信息,而一共有Integer.MAX_VALUE/2页。所以就ANR.
解决方式:我没有使用setCurrentItem
而是通过反射设置当前页,就不会引起大量计算。而且只会在更新以及重设adapter时反射修改,也没什么性能问题。这个库好久没看,细节有些记不起了。