【2025最新版Kotlin教程】Kotlin第一行代码系列第十五课-协程的使用场景

118 阅读1分钟
【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教程的源码项目结构图:

在这里插入图片描述

有问题或者完整源码的可以看简介联系我,也可以私信我,我每天都看私信的