android - 如何在Android中停止计时器
问题描述
在我的应用程序中我想使用CountDownTimer
,为此我写了下面的代码,但我想在某些情况下取消这个计时器,然后不运行这个计时器!
我写下面的代码并取消它,但每隔 1 秒再次运行这个计时器!
我想在调用 timer.cancel 之后,这个计时器已经取消并且不再运行!
我的代码:
private fun startTimer(timer: Long) {
calTimeChecker = timer
countDownTimer = object : CountDownTimer(Long.MAX_VALUE, 1000) {
@SuppressLint("SetTextI18n")
override fun onTick(millisUntilFinished: Long) {
//Calculate time
calTimeChecker -= 1
var seconds = (calTimeChecker)
val hours = seconds / (60 * 60)
val tempMint = seconds - hours * 60 * 60
val minutes = tempMint / 60
seconds = tempMint - minutes * 60
//This call api with MVP
presenter.getLastInfo(token, auctionId)
override fun onFinish() {
footerCheckingLay.visibility = View.VISIBLE
auctionDetail_footerInfo.visibility = View.INVISIBLE
auctionDetail_footerBottom.enableDisableView(false)
auctionDetail_footerPlusBidBtn.enableDisableView(false)
}
}.start()
override fun loadLastInfoUI(data: BidsRes) {
cancelTimer()
}
当调用presenter.getLastInfo(token,uctionId) api 时,使用loadLastInfoUI接收这个 api 数据。
private fun cancelTimer() {
try {
Log.e("BidsLog", "Cancel")
countDownTimer.cancel()
} catch (e: Exception) {
e.printStackTrace()
}
}
我的日志猫:
2020-08-04 12:28:07.646 30602-30602/com.app.android E/BidsLog: Cancel
2020-08-04 12:28:08.642 30602-30602/com.app.android E/BidsLog: Cancel
2020-08-04 12:28:09.641 30602-30602/com.app.android E/BidsLog: Cancel
2020-08-04 12:28:10.643 30602-30602/com.app.android E/BidsLog: Cancel
2020-08-04 12:28:11.655 30602-30602/com.app.android E/BidsLog: Cancel
2020-08-04 12:28:12.645 30602-30602/com.app.android E/BidsLog: Cancel
为什么从cancelTimer
方法调用取消日志后,再次调用此方法而不取消此计时器?
如何取消它并只显示此日志消息一次?
解决方案
您的计时器正在取消。将日志添加到onTick
方法,然后调用取消并检查是否onTick
不再打印来自的日志以确保您的计时器已取消。您看到的原因"BidsLog: Cancel"
是因为取消计时器不会取消记录。
推荐阅读
- azure - Azure Data Lake:此请求无权执行此操作
- java - 从数据库创建 mapbox 标记
- c# - Angular API 调用未在控制器方法中命中
- c# - 将 Google Drive API 与 XamarinForms 一起使用
- xcode - 有没有办法关闭 Xcode 索引?
- sql - 基于 SQL 中条件的 TextJoin 类函数
- r - 每组所有区间的并集
- python - 如何聚合熊猫数据框时间戳列从几天到几年,计算加权平均值
- javascript - 将数组的每个值应用于一个元素,直到到达数组的末尾?
- css - LESS 中复杂的 calc() 无法按预期工作