【发布时间】:2021-09-18 18:35:09
【问题描述】:
这是一个将 workmanager 作为前台服务的简单示例。问题是即使在工作管理器停止后,前台通知也会显示。我觉得这个问题与协程内存泄漏有关。
@HiltWorker
class MyForegroundWorker @AssistedInject constructor(
@Assisted context: Context,
@Assisted workerParams: WorkerParameters
) : CoroutineWorker(context, workerParams) {
private lateinit var notificationBuilder: NotificationCompat.Builder
private var i: Long = 0
private val notificationManager =
context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
override suspend fun doWork(): Result = withContext(Dispatchers.IO) {
setForeground(createForegroundInfo())
return@withContext runCatching {
while (true) {
updateNotification(i.toString())
i += 1
}
Result.success()
}.getOrElse {
Log.d("TAG", "doWork: ${it.message}, ${i}")
Result.failure()
}
}
//..
}
【问题讨论】:
-
您好,您用于显示通知的 while 循环没有退出条件。它总是正确的。因此,工人总是在循环中。这是我从代码 sn-p 中看到的。如果我错了,请纠正我。谢谢
-
是的,停止工作管理器的唯一方法是取消它。
标签: android-service android-notifications kotlin-coroutines android-workmanager