安卓定时任务单例

我没有使用setRepeat的方法,反而在每次进入这个闹钟的时候设定一个新闹钟

object SingleObject {
    var TIME_INTERVAL = 20000//1000*60*3L//这是3分钟
    var pendingIntent: PendingIntent? = null
    var alarmManager: AlarmManager? = null
    private const val POPUP_INTENT_ACTION = "pop_up_test_case"

    init {
        // 初始化定时任务
        alarmManager =
            ApplicationHolder.get().getSystemService(Context.ALARM_SERVICE) as? AlarmManager
        val intent = Intent()
        intent.action = POPUP_INTENT_ACTION
        pendingIntent = PendingIntent.getBroadcast(ApplicationHolder.get(), 0, intent, 0);
        register()
        setNextClock()
    }

    private fun setNextClock() {
        alarmManager?.set(
            AlarmManager.ELAPSED_REALTIME,
            SystemClock.elapsedRealtime() + TIME_INTERVAL,
            pendingIntent
        )
    }

    private val mTimingBroadcastReceiver = object : BroadcastReceiver() {

        override fun onReceive(context: Context, intent: Intent) {
            if (intent.action == POPUP_INTENT_ACTION) {
                trigger()
            }
        }
    }

    private fun register() {
        ApplicationHolder.get().registerReceiver(
            mTimingBroadcastReceiver,
            IntentFilter(POPUP_INTENT_ACTION)
        )
    }

    private fun unregister() {
        if (pendingIntent != null && alarmManager != null) {
            alarmManager?.cancel(pendingIntent)
        }
        ApplicationHolder.get().unregisterReceiver(mTimingBroadcastReceiver)
    }

    fun trigger() {
        var isAllow = true

        if (!isAllow)
            unregister()
        setNextClock()
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值