哈哈哈哈哈哈哈哈哈哈~
很早就开始学Kotlin了,项目中也渐渐使用,项目从最初的某个方法某个类写起,直到2022年的7月,决定中小型项目尽量全面使用Kotlin开发,直至目前,开发的项目90%都是Kotlin,还是处于Kotlin+Java混搭,笑死~
搞笑的是,每次写协程,写着写着就忘了,然后,打开百度,一边学一边写,所以,为了减少每次搜索的工作,决定在这篇文章总结平常开发使用的代码片段,方便搬砖(复制+粘贴)。
1、快速使用CoroutineScope + launch{}
CoroutineScope(Dispatchers.Main).launch {
delay(1000L)//阻塞时间
}
2、循环子线程
方法一
private var hd = Handler()
private var rb: Runnable = object : Runnable {
override fun run() {
hd.postDelayed(this, 3000)
pool.playByRes(R.raw.closed_barn_door)
}
}
启用
hd.postDelayed(rb,100)
停用
hd.removeCallbacks(rb)
方法二、在viewmodel中写
fun runForever() {
// start a new coroutine in the ViewModel
viewModelScope.launch {
// cancelled when the ViewModel is cleared
while(true) {
delay(1_000)
// do something every second
}
}
}
3、更新UI
withContext(Dispatchers.Main) {
Toast.makeText(this@MainActivity, "发送成功.", Toast.LENGTH_LONG).show()
}
或
thread{
//编写具体的逻辑
Thread.sleep(1000)
}
获取类名
private val TAG = MainActivity::class.java.name
4、接口回调
getInstance().init(this@MainActivity, object: XXX.XCallback{
override fun doCallback(id: String?, name: String?, data: String?) {
Log.e(TAG, "doCallback: ")
}
})
5、常见的 CoroutineScope 协程作用域 :
GlobalScope : 该作用域是 进程级别的 , 与应用进程同级 , 即使 Activity 被销毁 , 协程任务也可以继续执行 ;
MainScope : 该 作用域仅在 Activty 中 , 如果 Activity 被销毁 , 则 在 onDestory 生命周期函数中取消协程任务 ;
viewModelScope : 该作用与仅在 ViewModel 中使用 , 与 ViewModel 生命周期绑定 ;
lifecycleScope : 该作用与仅在 Activity 中使用 , 与 Activity 生命周期绑定 ;
————————————————