RollViewPager icon indicating copy to clipboard operation
RollViewPager copied to clipboard

Intetr.max

Open wasneverlonely opened this issue 8 years ago • 9 comments

wasneverlonely avatar Jan 20 '17 02:01 wasneverlonely

image

Jude95 avatar Jan 20 '17 06:01 Jude95

没打全 ... int half = Integer.MAX_VALUE/2; 这一句太阻塞主线程了...

wasneverlonely avatar Jan 21 '17 03:01 wasneverlonely

现在还会ANR? 现在应该并不会有过多计算。

Jude95 avatar Jan 21 '17 03:01 Jude95

只要用integer.max_value 适配页面数据的时候总会卡一段时间的

wasneverlonely avatar Jan 21 '17 08:01 wasneverlonely

如何复现?我测试都没问题。

Jude95 avatar Jan 22 '17 08:01 Jude95

如果只是测试没有问题 但是加到项目里面就可以卡了

wasneverlonely avatar Jan 24 '17 03:01 wasneverlonely

所以问你如何复现。你在项目里能复现,demo里就不能复现? 我知道Integer.MAX_VALUE会在计算当前偏移位置时大量循环,但通过反射可以避免这个问题,这个方式也比其他方式优势明显。 多个项目使用这么久并没问题。都是开发者应该知道复现是解BUG第一步。

Jude95 avatar Jan 24 '17 10:01 Jude95

@Jude95 Integer.MAX_VALUE会在计算当前偏移位置时大量循环,但通过反射可以避免这个问题,你好这个问题能解释下吗

summer-zhoujie avatar Mar 13 '17 03:03 summer-zhoujie

@jimUpdate 我将当前页设为Integer.MAX_VALUE/2,所以前后都有你一辈子都滑不完的页数,加上自己做的页面缓存就完美了。唯一的问题就是如何把页码设置到Integer.MAX_VALUE/2。 ViewPager里setCurrentItem时会调用setCurrentItemInternal,然后在‘populate’会进行计算,计算从当前位置到目标位置的偏移量,会获取每一页的信息,而一共有Integer.MAX_VALUE/2页。所以就ANR. 解决方式:我没有使用setCurrentItem而是通过反射设置当前页,就不会引起大量计算。而且只会在更新以及重设adapter时反射修改,也没什么性能问题。这个库好久没看,细节有些记不起了。

Jude95 avatar Mar 13 '17 12:03 Jude95