[英]How to stop timer in 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, auctionId) 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"
的原因是因為取消計時器不會取消記錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.