协程

268 阅读1分钟

定义: 它是kotlin基于JVM的线程来实现的一个并发任务的处理方案,

优势: 1、使用方便,不需要回调,用纯线性的代码方式,就可以完成线程的切换; 2、性能高,所有耗时任务可以保证一定放在后台执行,从而提高软件性能;

kotlin协程中suspend关键字的意义。

语法层面,作为一个标记和提醒,通过报错来提醒调用者和编译器,这是一个耗时函数,需要放在后台执行; 编译器层面,辅助kotlin编译器把代码转换成JVM的字节码

GlobalScope是全局的,很少用。 GlobalScope.launch返回一个Job对象,需要在销毁时调用job.cancel,否则会发生协程泄露

协程泄露本质上属于内存泄露中的线程泄露。

CoroutineScope:结构化并发(Structural Concurrency) 也可以使用->MainScope MainScope在launch时默认使用Dispatchers.Main,所以不需要加。在销毁onDestroy时调用mainScope.cancel就可以取消协程,避免协程泄露。

协程对LifeCycle、ViewModel、LiveData、Room支持性比较好 kotlin-ktx androidx.lifecycle:lefecycle-runtime-ktx:2.2.0 androidx.lifecycle:lefecycle-lievedata-ktx:2.2.0 androidx.lifecycle:lefecycle-viewmodel-ktx:2.2.0 lifecycleScope.launch 自动cancel,不用在onDestroy中销毁

lifecycleScope.launchWhenResumed 在onResume方法中执行launch

在ViewModel中 viewModelScope.launch