У меня есть Service
, который действует как TimerTask
, и даже если я остановлю службу, используя:
val intent = Intent(applicationContext, TimeService::class.java)
stopService(intent)
Это не останавливается, у меня есть Log
в onDestroy
, и это Log
запускается ... но я думаю, проблема в том, что я использую TimerTask
внутри Service
этого мой Service
class TimeService : Service() {
private val mHandler = Handler()
var calendar: Calendar? = null
var simpleDateFormat: SimpleDateFormat? = null
var strDate: String? = null
var date_current: Date? = null
var date_diff: Date? = null
private var mTimer: Timer? = null
private val NOTIFY_INTERVAL: Long = 1000
var intent: Intent? = null
companion object {
val str_receiver = "myreceiver"
}
override fun onBind(intent: Intent): IBinder? {
return null
}
override fun onCreate() {
super.onCreate()
calendar = Calendar.getInstance()
simpleDateFormat = SimpleDateFormat("HH:mm:ss", Locale.getDefault())
mTimer = Timer()
mTimer!!.scheduleAtFixedRate(TimeDisplayTimerTask(), 5, NOTIFY_INTERVAL)
intent = Intent(str_receiver)
}
internal inner class TimeDisplayTimerTask : TimerTask() {
override fun run() {
mHandler.post {
calendar = Calendar.getInstance()
simpleDateFormat = SimpleDateFormat("HH:mm:ss", Locale.getDefault())
strDate = simpleDateFormat!!.format(calendar!!.time)
Log.e("strDate", strDate)
twoDatesBetweenTime()
}
}
}
fun twoDatesBetweenTime(): String {
try {
date_current = simpleDateFormat!!.parse(strDate)
} catch (e: Exception) {
}
try {
date_diff = simpleDateFormat!!.parse(SharedPreferenceHelper.defaultPrefs(this).getString("data", ""))
} catch (e: Exception) {
}
try {
val diff = date_current!!.time - date_diff!!.time
val timeInSeconds = Integer.valueOf(SharedPreferenceHelper.defaultPrefs(this).getString("seconds", "")!!)
val timeTimer = TimeUnit.SECONDS.toMillis(timeInSeconds.toLong())
val diffWithTime = timeTimer - diff
val diffSeconds2 = diffWithTime / 1000 % 60
val diffMinutes2 = diffWithTime / (60 * 1000) % 60
val diffHours2 = diffWithTime / (60 * 60 * 1000) % 24
if (diffWithTime >= 0) {
val counterTime = "$diffHours2 : $diffMinutes2 : $diffSeconds2"
Log.e("TIME", counterTime)
fn_update(counterTime)
} else {
SharedPreferenceHelper.defaultPrefs(this).edit().putBoolean("finish", true).apply()
mTimer!!.cancel()
}
} catch (e: Exception) {
mTimer!!.cancel()
mTimer!!.purge()
}
return ""
}
override fun onDestroy() {
super.onDestroy()
Log.e("Service finish", "Finish")
}
private fun fn_update(str_time: String) {
intent!!.putExtra("time", str_time)
sendBroadcast(intent)
}
}
И проблема в том, что этот журнал:
Log.e("strDate", strDate)
И этот журнал:
Log.e("TIME", counterTime)
Никогда не останавливается, чего мне не хватает?
EDIT
Мой подход к этому моменту, но я не знаю, лучший ли это путь:
override fun onDestroy() {
super.onDestroy()
Log.e("Service finish", "Finish")
if(mTimer!=null){
mTimer!!.cancel()
mTimer!!.purge()
}
}