RecyclerView倒计时系统休眠View复用的解决方案
场景1:RecyclerView item 倒计时的时候,如果系统休眠或者应用切换到后台,由于当前应用被挂起,计时器会停止工作,返回应用计时器才开始继续工作,导致时间不对,这个计时器控件是用Timer写的。
- 解决方案:把Timer替换为CountDownTimer,系统休眠或者应用切换到后台后再返回时间依然准确,具体参考CountDownTimer源码,核心就是运用了SystemClock.elapsedrealtime()获取开机已运行时间这个API,通过Handler机制实现的。
场景2:假如说倒计时的item就在第一个,当你往下滑的时候第一个item滑出了屏幕,在你再返回第一个的时候,此时这个item的时间又重新开始倒计时了,因为你获取的服务器时间是你刷新的时候获得的,你下滑返回RecyclerView只是把从服务器获取的时间再加载一下。
- 解决方案:在网络请求数据返回的时候记录一下当时的开机运行时间long A =
SystemClock.elapsedrealtime();在Adapter里自定义控件传参数剩余时间milleft的时候用mlillet-(SystemClock.elapsedrealtime()-A),这样就可以解决View的复用导致的时间不对。
版权声明:本文为zw1234561024原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。