Android统一管理Timer计时器Service工具

在项目开发的中经常会遇到使用Timer计时器的时候。例如:活动倒计时、定时隐藏View、计时停止播放等等。提到上述场景在脑海中浮现的往往是Timer+TimerTask;CountDownTimer;Handler。没错这些类都可以很好的完成计时任务,但是在一些场景中往往开发出来的计时器会被系统回收导致计时不准确。例如:Activity中添加了CountDownTimer计时器,Activity在前台的时候计时器可以正常运行,但放置后台一段时间会发现计时器无法继续回调。我相信很多朋友都遇到过这样的问题,并为之烦恼良久。

为了解决计时器放置后台导致无法正常计时的问题。首先要考虑的是如何将计时器放置后台不会被系统GC掉,在Android中不能被系统回收的首选组件当然是Service服务。为什么选择Service不过多描述,不明白的小伙伴可以参考官方文档:服务概览  |  Android 开发者  |  Android Developers

计时器中需要有定时迭代的对象来计算时间。这个重任就落在了Handler身上。Handler中有设置间隔时间发送Message消息的sendEmptyMessageDelayed方法。可以通过它间隔一段时间计算一次时间。代码如下:

@SuppressLint("HandlerLeak")
inner class TimerHandler : Handler() {
    var isRunning: Boolean = false
    var isCallback: Boolean = false

    @SuppressLint("SuspiciousIndentation")
    override fun handleMessage(msg: Message) {
        super.handleMessage(msg)
        //系统时间
        currentSystemTime = SystemClock.elapsedRealtime() / 1000L
        //计算回调
        if (isCallback) {
            updateShowTime()
        }
        if (isRunning) {
            timerHandler.sendEmptyMessageDelayed(0, 250)
        }
    }
}

通过代码看到在TimerHandler中还有两个成员对象:isRunning、isCallback。

  1. isRu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熊猫vs笨笨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值