Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin如何从android.app.Application启动异步处理_Android_Kotlin_Kotlin Coroutines_Kotlin Android Extensions_Android Ktx - Fatal编程技术网

Kotlin如何从android.app.Application启动异步处理

Kotlin如何从android.app.Application启动异步处理,android,kotlin,kotlin-coroutines,kotlin-android-extensions,android-ktx,Android,Kotlin,Kotlin Coroutines,Kotlin Android Extensions,Android Ktx,我是Kotlin的新手,正在尝试在android.app.Application中启动一个异步后端调用 import android.app.Application; class App: Application { override fun onCreate() { super.onCreate() fetchDataFromBackend() } fun fetchDataFromBackend() { lifecycleScope.launch {

我是Kotlin的新手,正在尝试在android.app.Application中启动一个异步后端调用

import android.app.Application;

class App: Application {

  override fun onCreate() {
    super.onCreate()
    fetchDataFromBackend()
  }

  fun fetchDataFromBackend() {
    lifecycleScope.launch {
      // Fetches data from backed.
    }
  }
}
问题是不能从应用程序中使用lifecycleScope.launch,我已经在活动/片段和viewModelScope中为我的viewModel做了同样的操作

我希望在应用程序内部也这样做,有人有什么建议吗?

您可以使用,它与
应用程序
对象具有相同的生命周期

ProcessLifecycleOwner.get().lifecycleScope.launch {
  // Fetches data from backend
}
您可以使用,它与
应用程序
对象具有相同的生命周期

ProcessLifecycleOwner.get().lifecycleScope.launch {
  // Fetches data from backend
}

为了更好地理解,我可以问一下您的场景是什么,在
应用程序
类中从后端获取数据?为什么活动或片段不是您的选项?它用于获取整个应用程序生命周期所需的用户首选项,而不限于任何活动。我明白了,谢谢。
App
类的问题在于它没有一个合适的类似生命周期的活动。因此,如果需要,您无法正确地取消请求,就像您在活动中所做的那样。你有没有考虑过一种单一的活动方法,从那时起你可以做到这一点?老实说,我不知道什么是您的场景的最佳实践。我通常避免在
App
类中执行任何复杂的逻辑。为了更好地理解,我可以问一下您的场景是什么,在
App
类中从后端获取数据?为什么活动或片段不是您的选项?它用于获取整个应用程序生命周期所需的用户首选项,而不限于任何活动。我明白了,谢谢。
App
类的问题在于它没有一个合适的类似生命周期的活动。因此,如果需要,您无法正确地取消请求,就像您在活动中所做的那样。你有没有考虑过一种单一的活动方法,从那时起你可以做到这一点?老实说,我不知道什么是您的场景的最佳实践。我通常避免在
App
类中执行任何复杂的逻辑。如果我错了,请纠正我,但这不能保证在应用程序发送到后台后立即调用。所以它不适合清理不再需要的任务和内存。你是对的。在此作用域中运行就像在线程或异步任务中运行一样——它不会使您的进程保持活动状态,因此如果没有其他服务或活动正在运行,操作系统可能会终止您的应用程序进程。OP提到它是用来获取用户偏好的,所以我假设如果没有其他组件运行,获取动作就没有意义了,所以在这个协同程序中间被杀死是可以的。如果我错了请更正我,但是在你的应用程序被发送到后台之后,这不保证会被调用。所以它不适合清理不再需要的任务和内存。你是对的。在此作用域中运行就像在线程或异步任务中运行一样——它不会使您的进程保持活动状态,因此如果没有其他服务或活动正在运行,操作系统可能会终止您的应用程序进程。OP提到它是用来获取用户偏好的,所以我假设如果没有其他组件在运行,那么获取动作就没有意义了,所以在这个协同程序的中间会被应用程序杀死。