协程工作者在杀死应用程序后被杀死

时间:2020-07-02 14:13:38

标签: android kotlin coroutine android-workmanager

可以说我有一项活动可以启动一个工人。在工作程序内部,我执行了伪暂停过程,然后从数据库中打印出结果。这是代码

启动工作人员的活动是

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协程,为什么会发生这种情况? 正确的方法是什么?

0 个答案:

没有答案