【问题标题】:Coroutine Worker gets killed after kill the appCoroutine Worker 在杀死应用程序后被杀死
【发布时间】:2020-10-23 04:06:43
【问题描述】:

假设我有一个启动工人的活动。在工人内部,我做了一个伪挂起过程,然后我从数据库中打印出一个结果。这是代码

启动worker的activity是

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 中看到 system.out 和 1,2,3... 然后我看到了 toast 消息。 但是,当我在计数器仍在计数的情况下从最近完全杀死应用程序时,我永远不会看到 toast 消息。 为什么会发生这种情况,因为我有一个 GlobalScope 协程? 这样做的正确方法是什么??

【问题讨论】:

  • 我不确定我是否理解您的问题。如果您终止该应用程序,则不应期望发生其他任何事情。如果它被杀死,它就会被杀死。应用程序中发生的任何事情都不会比应用程序更长寿。
  • 使用前台服务并在服务内部执行你的操作。这样即使您的应用程序杀死它仍然执行您的逻辑

标签: android kotlin coroutine android-workmanager


【解决方案1】:

我试图实现类似的目标。我使用 ForegroundService 管理我的工作。 你可以在这里找到更多 https://developer.android.com/guide/components/foreground-services

【讨论】:

  • 您能否分享一个小示例代码以了解您所做的事情?谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-15
  • 1970-01-01
  • 1970-01-01
  • 2013-09-19
  • 2014-06-24
  • 1970-01-01
相关资源
最近更新 更多