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更新。


版权声明:本文为qq_40263927原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_40263927/article/details/119085817