在App中, 有多种多样的倒计时需求, 比如:
- 在单View上, 使用倒计时, 如(如图-1)
- 在ListView(或者GridView)的ItemView上, 使用倒计时(如图-2)
图-1 | 图-2 |
相比需求-1, 需求-2的难度更大, 性能要求更高: 因为AbsListView会涉及到ItemView重用的问题会使得管理定时器很麻烦, 另外如果定时地通过Base#notifyDataChanged()去刷新数据, 性能又相对较低, 也会引起滚动卡顿的问题. 因此, 此文主要解决的问题是如何合理地在AbsListView中使用倒计时.
知识要点
- AbsListView ItemView重用机制
- android.os.CountDownTimer
基本思路
- 使用CountDownTimer来完成基本倒计时功能
- 按倒计时的时间间隔来分组管理CountDownTimer, 即相同时间间隔的Item使用同一个CountDownTimer
- 每组CountDownTimer倒计时的时间取组内的最大值, 一旦Item到达自身的倒计时时间, 就会从该组倒计时中被移除
- 定义一个倒计时任务, 用来管理上述分组
- 每个业务可以根据需要创建并启动多个倒计时任务, 且可以在适当的页面生命周期函数中停止该任务
实现代码
- github – /
具体用法
-
普通页面:
-
列表页面:
END. SEE MORE: