android - 执行功能,无论活动完成
问题描述
目前,我正在制作一个基于 Kotlin 的 Android 应用程序。我在工作的时候出现了一个问题,问题是我需要使用一个不管活动结束都运行的函数,但我不知道怎么做。参照我插的图来说明,函数在Activity 1中被调用并执行,Activity 1被终止(finish()),但是被调用的函数必须要执行,而且在Activity中调用函数应该也是可以的2和活动3。由于我搜索这个,我坚持使用协程。请检查结果是否正确。作为参考,应该执行的函数是一个倒数计时器,即使在应用程序关闭时也会运行。
功能(start_timer)
fun start_timer() {
if(mTimerRunning){
}
else {
startTimer()
}
}
//timer_zone
private fun startTimer() {
mEndTime = System.currentTimeMillis() + mTimeLeftInMillis
mCountDownTimer = object : CountDownTimer(mTimeLeftInMillis, 1000) {
override fun onTick(millisUntilFinished: Long) {
mTimeLeftInMillis = millisUntilFinished
updateCountDownText()
}
override fun onFinish() {
My_App_Data.check_heart +=1
mTimerRunning = false
//
resetTimer()
if(My_App_Data.check_heart <5){
startTimer()
}
else{
}
}
}.start()
mTimerRunning = true
}
private fun pauseTimer() {
mCountDownTimer!!.cancel()
mTimerRunning = false
}
private fun resetTimer() {
mTimeLeftInMillis = START_TIME_IN_MILLIS
updateCountDownText()
//check_heart+=1
}
private fun updateCountDownText() {
val minutes = (mTimeLeftInMillis / 1000).toInt() / 60
val seconds = (mTimeLeftInMillis / 1000).toInt() % 60
val timeLeftFormatted = String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds)
//mTextViewCountDown!!.text = timeLeftFormatted
My_App_Data.reset_heart_timer =timeLeftFormatted
}
override fun onStop() {
super.onStop()
val prefs = getSharedPreferences("prefs", MODE_PRIVATE)
val editor = prefs.edit()
editor.putLong("millisLeft", mTimeLeftInMillis)
editor.putBoolean("timerRunning", mTimerRunning)
editor.putLong("endTime", mEndTime)
editor.apply()
if (mCountDownTimer != null) {
mCountDownTimer!!.cancel()
}
}
override fun onStart() {
super.onStart()
val prefs = getSharedPreferences("prefs", MODE_PRIVATE)
mTimeLeftInMillis = prefs.getLong("millisLeft", START_TIME_IN_MILLIS)
mTimerRunning = prefs.getBoolean("timerRunning", false)
updateCountDownText()
if (mTimerRunning) {
mEndTime = prefs.getLong("endTime", 0)
mTimeLeftInMillis = mEndTime - System.currentTimeMillis()
if (mTimeLeftInMillis < 0) {
mTimeLeftInMillis = 0
mTimerRunning = false
updateCountDownText()
} else {
startTimer()
}
}
}
companion object {
private const val START_TIME_IN_MILLIS: Long = 10000
}
解决方案
这是您所描述的延期工作。对于此 Android 官方文档,推荐使用WorkManager
. 考虑使用它,因为它旨在能够在后台完成任务,无论 Activity 是否在前台或应用程序被杀死。
请参阅工作管理器
“WorkManager 是一个库,用于将可延迟的工作排入队列,保证在满足其约束后的某个时间执行。”
推荐阅读
- blockchain - 以太坊挖矿中的 Nonce
- r - 如何从 R 中的 HTML 选择/选项标签中抓取值
- php - 避免选择值操作
- java - 线程池中的 Netty 连接
- java - 通过 FileChooser 保存 pdf 格式在 java 中提示第二个对话框
- c++ - 带参数的数据结构的全局声明
- php - 使用正则表达式从多行中获取分离的数据
- android - 如何使用 GridLayout 在 Recyclerview + Cardview 中嵌入 Admob 原生广告和插页式广告
- ads-data-hub - 访问 Google Ads 数据中心
- python - 根据它们在熊猫面板中的各自值的组 ID