【发布时间】:2021-08-22 06:26:25
【问题描述】:
上下文
我正在尝试在 Android 6 中更新几个后台作业。主要目标是使后台作业完成的工作轻松且非 ui 线程阻塞。所以我决定做一些事情:
- GlobalScope 可能不是一个好主意,因为垂死的线程会终止其他线程。所以 CoroutineScope 会成功的
- 因为我需要完成 I/O 和网络工作,所以我需要一个专为这些任务设计的线程池。所以我将使用 Dispatchers.IO
- 绑定的 JobServices 的工作是为“一劳永逸”而设计的。应用程序不在乎 - 所以我会启动作业而不是等待异步输出
代码
我一起设计了以下 JobService 类作为其他人迁移或实现的模板。由于作业被取消,该类将向继承的函数返回 false。
import android.app.job.JobParameters
import android.app.job.JobService
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class TestJobService : JobService() {
override fun onStartJob(params: JobParameters?): Boolean {
CoroutineScope(Dispatchers.IO).launch {
// Fire and Forget
}
return false
}
override fun onStopJob(params: JobParameters?): Boolean {
return false
}
}
问题
如果您想回答,请使用问题的编号。
- CoroutineScope 是个好主意吗?
- 我从主线程“I/art:注意:结束时间超过纪元:”中收到错误 - 这很令人困惑,可能表明 JobService 在 UI 线程上做了很多工作。但是我没有来自编舞者的错误,如果 UI 出现问题,通常应该是这种情况。
- 在 JobService 函数中返回 false 是不是一个坏主意
当前使用的链接
https://medium.com/androiddevelopers/coroutines-on-android-part-i-getting-the-background-3e0e54d20bb https://medium.com/androiddevelopers/coroutines-on-android-part-ii-getting-started-3bff117176dd https://medium.com/androiddevelopers/coroutines-on-android-part-iii-real-work-2ba8a2ec2f45 https://developer.android.com/kotlin/coroutines/coroutines-adv?hl=de#coroutinescope https://kotlinlang.org/docs/coroutines-basics.html#extract-function-refactoring
【问题讨论】: