深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
在GlobalScope{…}
- GlobalScope{…}当按下按钮时,主要协程将被启动。
- 当按下按钮时,每次都会以第二个延迟运行无限循环。
- 延迟 5 秒后,将启动第二个片段,如下代码所示:
view.toSecondFragment.setOnClickListener {
GlobalScope.launch{
while (true) {
delay(1000L)
Log.d("From GlobalScope", "Global Scope Is Still Running")
}
}
GlobalScope.launch(Dispatchers.Main){
delay(5000L)
Navigation.findNavController(view).navigate(R.id.firstFragment_to_secondFragment)
}
}
- 现在在成功构建后启动应用程序:
- 正如你所看到的,即使第一个片段已经死了,我们的循环仍然继续,因为我们声明了我们的范围,GlobalScope{…}它将继续运行,直到我们的应用程序死了。
- 这是在 Kotlin-Coroutines 中不鼓励使用 GlobalScope 的主要原因。
在lifecycleScope{…}
- lifecycleScope{…}当按下按钮时,主要协程将被启动。
- 当按下按钮时,每次都会以第二个延迟运行无限循环。
- 延迟 5 秒后,将启动第二个 Fragment。
正如您viewLifecycleOwner在启动协程之前提到的代码中所见lifecycleScope{…}
- 这是因为我正在处理片段。viewLifecycleOwner当 Fragment 有它的 UI 时添加 ( onCreateView() , onDestroyView() )这是添加到 Fragment 的整体生命周期( onCreate() , onDestroy() )。
- 以防万一,如果您正在从事活动,则无需提及viewLifecycleOwner。
view.toSecondFragment.setOnClickListener {
viewLifecycleOwner.lifecycleScope.launch{
while (true) {
delay(1000L)
Log.d("From LifeCycleScope", "LifeCycleScope Is Still Running")
}
}
viewLifecycleOwner.lifecycleScope.launch(Dispatchers.Main){
delay(5000L)
Navigation.findNavController(view).navigate(R.id.firstFragment_to_secondFragment)
}
}
- 现在在成功构建后启动应用程序:
- 如您所见,一旦片段死亡,协程执行就停止了。
同样意味着viewModelScope{…}同样,它也将执行与 相同lifecycleScope{…}。但是viewModelScope{…}当你使用 ViewModel(s) 时你会用到。
结论
- 当您希望操作GlobalScope{…}运行直到应用程序死机时使用,如果不是,您绝对应该使用lifecycleScope{…}.
- 如果您正在使用 ViewModel(s),您可以使用viewModelScope{…}.
最后,如果大伙有什么好的学习方法或建议欢迎大家在评论中积极留言哈,希望大家能够共同学习、共同努力、共同进步。
小编在这里祝小伙伴们在未来的日子里都可以 升职加薪,当上总经理,出任CEO,迎娶白富美,走上人生巅峰!!
不论遇到什么困难,都不应该成为我们放弃的理由!
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**