当前位置: 移动技术网 > IT编程>开发语言>Java > kotlin--9

kotlin--9

2020年07月08日  | 移动技术网IT编程  | 我要评论

 

本周kotlin,看到协程这个模块

java里面线程可以new Thread

kotlin协程用于线程切换,kotlin里面不需要new Thread,并且,协程的开销小于new Thread。有几种种写法:runBlocking,launch  说下他们简单用法 跟特点

 

依赖

  协程需要额外依赖一个库协程用于android的库,它会自动依赖官方提供的那个协程的代码库。

    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0-M2'

 

 

runBlocking

用法: 

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        runBlocking {
            Log.e("wz", "for_start")
            for (i in 0..5) {
                Log.e("wz", i.toString())
            }
            Log.e("wz", "for_end")
            tvName.text =  "for_end"
        }
        Log.e("wz", "runBocking外")
    }

结果:

 

从打印顺序上看,runBlocking的执行顺序是从上往下执行的,并且能更新页面 

  1. 会阻塞线程
  2. 从上往下按顺序执行的
  3. 可以更新页面

  java里面有Thread,所以线程休眠用Thread.sleep()。kotlin里面既然协程可以取代Thread,所以,kotlin也有自己的休眠方法,也就是上面的delay(),注意,这里delay只能用在协程里面,不能用在外面。

GlobalScope.launch

用法:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        GlobalScope.launch {
            Log.e("wz", "for_start")
            for (i in 0..5) {
                Log.e("wz", i.toString())
            }
            Log.e("wz", "for_end")
            tvName.text =  "for_end"
        }
        Log.e("wz", "协程外")
    }

 

结果:

从打印顺序上面看,launch是先执行外面的代码,然后执行协程里面的代码,并且更新了页面。回答上面的三个问题:

  1. 不会阻塞线程
  2. 既然不会阻塞线程,那就是并行的
  3. 能更新页面

 

本文地址:https://blog.csdn.net/yangbin0513/article/details/107095233

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网