【2025最新版Kotlin教程】Kotlin第一行代码系列第十五课-协程的使用场景
说下使用场景:
- 凡事用线程的,都可以改为用协程
- 有线程切换的,都可以用协程
- 需要等待其他结果返回再往下走的,都可以用协程
下面是我在Android开发中使用的例子,具体看CoroutineActivity
// 源码联系:893151960
class CoroutineActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_coroutine)
}
/**
* 场景1:切换线程,切出去再切回来
*/
private fun dealMsgListData(){
//获取消息列表请求检查消息列表用户-列表,需新开线程,不卡住
lifecycleScope.launch(Dispatchers.IO){
// RongIM.getInstance().getConversationList(object : RongIMClient.ResultCallback<List<Conversation>>(){
// override fun onSuccess(p0: List<Conversation>?) {
//
// }
// override fun onError(p0: RongIMClient.ErrorCode) {
//
//
// }
// },Conversation.ConversationType.PRIVATE)
}
//切出去再切回来
lifecycleScope.launch(Dispatchers.IO) {
//要延迟,时间不能太短,否则mListFragment?.wrappedAdapter?.data还是为空的
delay(1000)
launch(Dispatchers.Main) {
}
}
}
/**
* 场景2:延迟操作
*/
private fun delayTest(){
lifecycleScope.launch {
delay(500)
// tv.setText("999")
}
}
/**
* 场景3:等待其他值返回再继续跑下去
*/
private fun waitResult(){
lifecycleScope.launch(Dispatchers.Main){
// mBinding.tvWaitLoadLocalPhoto.visibility = View.VISIBLE
// // 等待值返回
// totalData = withContext(Dispatchers.IO) { VideoUtils.getLocalAlbumList(mContext) }
// mBinding.tvWaitLoadLocalPhoto.visibility = View.GONE
// selectPhotoAdapter.setNewInstance(totalData.photoList[0].photoList)
}
}
/**
* 场景4:倒计时
*/
private fun countDownTime(){
lifecycleScope.launch {
repeat(20){
//tv.setText("${20-it}S")
delay(1000)
if (it == 19){
//最后一秒
//dialog.dismiss()
}
}
}
}
}
整个kotlin教程的源码项目结构图:
有问题或者完整源码的可以看简介联系我,也可以私信我,我每天都看私信的