可以说我有一项活动可以启动一个工人。在工作程序内部,我执行了伪暂停过程,然后从数据库中打印出结果。这是代码
启动工作人员的活动是
class SplashActivity: BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_splash)
val oneTimeRequest = OneTimeWorkRequest.Builder(MyWorker::class.java).setInputData(Data.Builder().apply {
putInt("data", 1)
}.build()).addTag("worktag").build()
WorkManager.getInstance(applicationContext).enqueue(oneTimeRequest)
}
}
工人在下面
class MyWorker @AssistedInject constructor(
@Assisted private val appContext: Context,
@Assisted private val params: WorkerParameters,
private val serverRepository: ServerRepository
) : CoroutineWorker(appContext, params) {
override suspend fun doWork(): Result {
GlobalScope.launch {
for (i in 0..10) {
println("$i")
delay(1000)
}
val servers = serverRepository.getServers()
runOnUiThread {
Toast.makeText(appContext, "${servers.firstOrNull()?.serverAddress}", Toast.LENGTH_SHORT).show()
}
}
return Result.success()
}
}
因此,结果是我在logcat中看到了1,2,3 ...的system.out ...,然后看到了敬酒消息。 但是,当我仍然在最近仍然完全关闭该计数器的应用程序时,我再也看不到该吐司消息。 因为我有GlobalScope协程,为什么会发生这种情况? 正确的方法是什么?