史上最详Android版kotlin协程入门进阶实战(一),设计思想与代码质量优化+程序性能优化+开发效率优化

import kotlinx.coroutines.*

import java.lang.NullPointerException

class MainActivity : AppCompatActivity() {

private lateinit var btn:Button

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

btn = findViewById(R.id.btn)

btn.setOnClickListener {

start()

}

}

private fun start(){

runBlocking {

Log.d(“runBlocking”, “启动一个协程”)

}

GlobalScope.launch{

Log.d(“launch”, “启动一个协程”)

}

GlobalScope.async{

Log.d(“async”, “启动一个协程”)

}

}

}

然后运行app,点击按钮执行start()方法。我们就可以在控制台上看到如下输出:

D/runBlocking: 启动一个协程

D/launch: 启动一个协程

D/async: 启动一个协程

image.png

,so easy。协程原来这么简单,那我们接着继续往下走。上面提到过三种启动方式分别会的得到各自的返回信息。我们现在增加三个变量然后分别用协程进行赋值,同时进行输出:

private fun start(){

val runBlockingJob = runBlocking {

Log.d(“runBlocking”, “启动一个协程”)

}

Log.d(“runBlockingJob”, “$runBlockingJob”)

val launchJob = GlobalScope.launch{

Log.d(“launch”, “启动一个协程”)

}

Log.d(“launchJob”, “$launchJob”)

val asyncJob = GlobalScope.async{

Log.d(“async”, “启动一个协程”)

“我是返回值”

}

Log.d(“asyncJob”, “$asyncJob”)

}

然后运行,我们可以在控制台上看到如下输出:

D/runBlocking: 启动一个协程

D/runBlockingJob: 41

D/launchJob: StandaloneCoroutine{Active}@3b8b871

D/launch: 启动一个协程

D/async: 启动一个协程

D/asyncJob: DeferredCoroutine{Active}@63f265

也有可能是

D/runBlocking: 启动一个协程

D/runBlockingJob: 41

D/launchJob: StandaloneCoroutine{Active}@1344515

D/asyncJob: DeferredCoroutine{Active}@38c002a

D/async: 启动一个协程

D/launch: 启动一个协程

还有可能是

D/runBlocking: 启动一个协程

D/runBlockingJob: 41

D/launch: 启动一个协程

D/launchJob: StandaloneCoroutine{Active}@b94e973

D/async: 启动一个协程

D/ asyncJob: DeferredCoroutine{Active}@f7aa030

嗯哼,什么情况

怎么后面4条日志顺序还是随机的。没有看懂的童鞋,说明你没有仔细看上面的文字。

知识点来了,赶紧拿出你的小本本记下来,我们一个一个的来分析。

我们在上面提到过runBlocking启动的是一个新的协程并阻塞调用它的线程,我们对比输出日志可以看到前两条runBlocking的相关输出日志的位置顺序是不会变化的,这就证明我们之前所说的runBlocking会阻塞调用它的线程,直到runBloc

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值