最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Kotlin學(xué)習(xí)教程之協(xié)程Coroutine

 更新時間:2018年05月17日 08:38:17   作者:wenson123  
這篇文章主要給大家介紹了關(guān)于Kotlin學(xué)習(xí)教程之協(xié)程Coroutine的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

定義

Coroutine翻譯為協(xié)程,Google翻譯為協(xié)同程序,一般也稱為輕量級線程,但需要注意的是線程是操作系統(tǒng)里的定義概念,而協(xié)程是程序語言實現(xiàn)的一套異步處理的方法。

在Kotlin文檔中,Coroutine定義為一個可被掛起的計算實例,下面話不多說了,來一起看看詳細(xì)的介紹吧。

配置

build.gradle中dependencies 添加下面2行,注意coroutine目前仍處于experiment階段,但Kotline官方保證向前兼容。

 dependencies { 
  implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.22.5'  
  implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:0.19.3" 
 }

實例

我們看一個簡單Android示例:

activity_coroutine.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context=".coroutine.CoroutineActivity">

 <TextView
  android:id="@+id/tvHello"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" />
</android.support.constraint.ConstraintLayout>

CoroutineActivity.kt

class CoroutineActivity : AppCompatActivity() {
 override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_coroutine)
  setup()
 }

 fun setup() {
  launch(UI) { // launch coroutine in UI context
   for (i in 10 downTo 1) { // countdown from 10 to 1
    tvHello.text = "Countdown $i ..." // update text
    delay(1000) // wait half a second
   }
   tvHello.text = "Done!"
  }
 }
}

運行程序 tvHello從10倒計時顯示到1,最后顯示"Done!"

代碼分析:

我們重點分析setup()函數(shù)

  • launch(UI) {...} -----在UIcontext下啟動coroutine
  • delay(1000) ----將當(dāng)前coroutine掛起1秒

看到這里你可能會疑惑,Android開發(fā)中不是禁止在主線程下做延遲或者阻塞操作嗎?

我們回顧下Coroutine的定義:一個可被掛起的計算實例。

Coroutine不是線程,所以掛起Coroutine不會影響當(dāng)前線程的運行。

取消Coroutine運行

我們修改下上面的代碼:

class CoroutineActivity : AppCompatActivity() {
 lateinit var job:Job
 override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_coroutine)
  setup()
 }

 fun setup() {
  job = launch(CommonPool) { // launch coroutine in UI context
   for (i in 10 downTo 1) { // countdown from 10 to 1
    tvHello.text = "Countdown $i ..." // update text
    delay(1000) // wait half a second
   }
   tvHello.text = "Done!"
  }
 }

 override fun onPause() {
  super.onPause()
  job.cancel()
 }
}

重點是 launch(UI)返回給一個job實例,通過job.cancel()取消coroutine。

Coroutine和thread關(guān)系

我們再分析下

launch(UI)

這行代碼是指將coroutine指派在UI線程上運行

當(dāng)我們運行一段cpu耗時操作時,則需要將coroutine指定在非UI線程上。

我們寫成:

launch(){...}

這行代碼等價于:

launch(CommonPool){...}

我們分析下CommonPool的實現(xiàn),發(fā)現(xiàn)它會根據(jù)當(dāng)前cpu的核數(shù)創(chuàng)建一個線程池提供給Coroutine使用。

 private fun createPlainPool(): ExecutorService {
  val threadId = AtomicInteger()
  return Executors.newFixedThreadPool(defaultParallelism()) {
   Thread(it, "CommonPool-worker-${threadId.incrementAndGet()}").apply { isDaemon = true }
  }
 }

 private fun defaultParallelism() = (Runtime.getRuntime().availableProcessors() - 1).coerceAtLeast(1)

總結(jié):

通過上面的分析,我們理解了Coroutine是一個運行在線程上的可被掛起的計算單元實例,對Coroutine的delay,cancel操作不會影響線程的運行,線程的狀態(tài)變化對我們是透明的,我們不需要關(guān)心。

所以使用Coroutine,可以使我們更加方便得處理異步操作,比如網(wǎng)絡(luò)請求,數(shù)據(jù)存儲等。

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 淺析Android.mk

    淺析Android.mk

    Android.mk是Android提供的一種makefile文件,用來指定諸如編譯生成so庫名、引用的頭文件目錄、需要編譯的.c/.cpp文件和.a靜態(tài)庫文件等。要掌握jni,就必須熟練掌握Android.mk的語法規(guī)范
    2016-01-01
  • android讀寫cookie的方法示例

    android讀寫cookie的方法示例

    這篇文章主要介紹了android讀寫cookie的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • 通過實例解析android Activity啟動過程

    通過實例解析android Activity啟動過程

    這篇文章主要介紹了通過實例解析android Activity啟動過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • Android 8.0系統(tǒng)中應(yīng)用圖標(biāo)的適配微技巧

    Android 8.0系統(tǒng)中應(yīng)用圖標(biāo)的適配微技巧

    這篇文章主要介紹了Android 8.0系統(tǒng)中應(yīng)用圖標(biāo)的適配微技巧 ,需要的朋友可以參考下
    2018-04-04
  • 基于android startActivityForResult的學(xué)習(xí)心得總結(jié)

    基于android startActivityForResult的學(xué)習(xí)心得總結(jié)

    本篇文章是對android中的startActivityForResult進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Android APT 實現(xiàn)控件注入框架SqInject的示例

    Android APT 實現(xiàn)控件注入框架SqInject的示例

    這篇文章主要介紹了Android APT 實現(xiàn)控件注入框架SqInject的示例,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下
    2021-03-03
  • Flutter實現(xiàn)紅包動畫效果的示例代碼

    Flutter實現(xiàn)紅包動畫效果的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Flutter實現(xiàn)紅包的動畫效果,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的小伙伴可以了解一下
    2023-06-06
  • 深入Android線程的相關(guān)問題解惑

    深入Android線程的相關(guān)問題解惑

    本篇文章是對Android線程的相關(guān)問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Android自動獲取短信驗證碼功能

    Android自動獲取短信驗證碼功能

    這篇文章主要介紹了Android自動獲取短信驗證碼功能,通過自定義短信監(jiān)聽器用于自動填充驗證碼功能,具體實現(xiàn)代碼大家可以參考下本文
    2017-04-04
  • Android Kotlin Flow 冷熱流詳解

    Android Kotlin Flow 冷熱流詳解

    在Android開發(fā)中,Flow是Kotlin協(xié)程庫的重要組成部分,用于處理異步數(shù)據(jù)流,它能夠異步生產(chǎn)多個值,類似于RxJava中的Observable,本文介紹Android Kotlin Flow 冷熱流,感興趣的朋友一起看看吧
    2024-11-11

最新評論

兴仁县| 偏关县| 姜堰市| 米林县| 镇宁| 阿克苏市| 泌阳县| 缙云县| 四子王旗| 林西县| 贵港市| 新野县| 博湖县| 湘潭县| 霍林郭勒市| 瑞昌市| 崇州市| 松江区| 石城县| 宣威市| 青海省| 白玉县| 刚察县| 紫云| 佛学| 林口县| 许昌市| 昆明市| 光山县| 新干县| 杨浦区| 津南区| 原平市| 思茅市| 高陵县| 青龙| 镇原县| 香河县| 遂溪县| 巴林右旗| 吴堡县|