Kotlin 协程的非阻塞式挂起

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
import org.kotlin2.`interface`.DoSomeThingCallBack
import org.kotlin2.bean.Person
import org.kotlin2.databinding.ActivityMainBinding
import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding
    private val mainScope = MainScope()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)


        mainScope.launch {
            Log.i("MainActivity1","[${Thread.currentThread().name}] ")
            binding.tvName.setText("协程的使用");
            var dothing=doSomething()
            Log.i("MainActivity3",dothing);
        }

        Log.i("MainActivity2","[${Thread.currentThread().name}] ")



    }

    suspend fun doSomething() = suspendCoroutine<String> {

        Log.i("MainActivity4","[${Thread.currentThread().name}] ")
        Person.instance.run("正在跑步",object : DoSomeThingCallBack<String?> {
            override fun onSuccess(doing:String?) {
                it.resume(doing!!)
            }

            override fun onFailure() {
                it.resume("不知道在做什么")
            }

        })
    }
}

 运行后查看日志,可以看出协程不会阻塞主线程的执行,而且可以执行ui操作。如果是java 就要用线程执行后通知主线程ui更新。

猜你喜欢

转载自blog.csdn.net/qq_40263927/article/details/119085817
今日推荐