当前位置:   article > 正文

使用更为安全的方式收集 Android UI 数据流,移动app定制开发_lifecyclescope.launchwhenstarted

lifecyclescope.launchwhenstarted

}

}

lifecycleScope.launchWhenStarted 挂起了协程的执行。虽然新的位置信息没有被处理,但 callbackFlow 生产者仍然会持续发送位置信息。使用 lifecycleScope.launch 或 launchIn API 会更加危险,因为视图会持续消费位置信息,即使处于后台也不会停止!这种情况可能会导致您的应用崩溃。

为了解决这些 API 所带来的问题,您需要在视图转入后台时手动取消收集操作,以取消 callbackFlow 并避免位置提供者持续发送项目并浪费资源。举例来说,您可以像下面的例子这样操作:

class LocationActivity : AppCompatActivity() {

// 位置的协程监听器

private var locationUpdatesJob: Job? = null

override fun onStart() {

super.onStart()

locationUpdatesJob = lifecycleScope.launch {

locationProvider.locationFlow().collect {

// 新的位置!更新地图。

}

}

}

override fun onStop() {

// 在视图进入后台时停止收集数据

locationUpdatesJob?.cancel()

super.onStop()

}

}

这是一个不错的解决方案,美中不足的是有些冗长。如果这个世界有一个有关 Android 开发者的普遍事实,那一定是我们都不喜欢编写模版代码。不必编写模版代码的一个最大好处就是——写

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/495703
推荐阅读
相关标签
  

闽ICP备14008679号