白話kotlin:用協(xié)程來(lái)愉快的處理異步問(wèn)題

Coroutine(協(xié)程)是什么玩意腋腮?

協(xié)程名字聽起來(lái)很玄乎勒虾,其實(shí)他是很簡(jiǎn)單的纺阔。
所謂協(xié)程,就是相互協(xié)作的程序修然。

為了做好一件事情州弟,我們的程序要相互協(xié)作钧栖!

一個(gè)協(xié)程代表著:幾段互相幫助,互相協(xié)作的代碼婆翔。

舉個(gè)簡(jiǎn)單的例子:
在Android中拯杠,我們?cè)趗i線程中做與界面相關(guān)的操作。
但我們經(jīng)常會(huì)遇到磁盤的讀寫啃奴,網(wǎng)絡(luò)的請(qǐng)求潭陪,這些繁瑣耗時(shí)的操作我們是在另外一個(gè)線程的處理,等這些操作完成后最蕾,我們?cè)侔呀Y(jié)果顯示到界面上依溯。

以上就是一種協(xié)作,總結(jié)下:

  1. ui線程把耗時(shí)操作的代碼塊交給其他線程來(lái)處理
  2. 其他線程處理處理完成后瘟则,把結(jié)果交付給ui線程顯示

其實(shí)以上的例子就是所謂的異步問(wèn)題
如何處理異步問(wèn)題黎炉?
有很多種方法:

  1. 開啟一起線程處理
  2. 利用AsyncTask
  3. 利用CallBack
  4. 利用RxJava

以上方法本質(zhì)上都是在另外一個(gè)線程處理耗時(shí)的操作,只是寫法上一個(gè)比一個(gè)先進(jìn)一點(diǎn)醋拧,人性化一點(diǎn)慷嗜。

OK,協(xié)程可以更加人性化丹壕,寫出來(lái)的代碼更加人性化一些庆械,很直觀的看出哪些代碼在互相協(xié)作,看下面的對(duì)比:

協(xié)程 vs 回調(diào)

1. 異步計(jì)算

2. 異步UI

看了上面的例子菌赖,是不是感覺:
協(xié)程中最大的特色:將異步代碼寫的干凈清晰缭乘!

協(xié)程的基本使用

  1. 啟用一個(gè)協(xié)程


  2. 啟用一個(gè)可阻塞當(dāng)下線程的協(xié)程


  3. 主動(dòng)去等待一個(gè)協(xié)程完成


  4. 重構(gòu),將代碼組織進(jìn)一個(gè)函數(shù)內(nèi)琉用,這個(gè)函數(shù)被 suspend修飾


  5. 其他:

  • 協(xié)程是可以被取消的和超時(shí)控制
  • 可以組合被掛起的函數(shù)
  • 協(xié)程中運(yùn)行環(huán)境的指定堕绩,也就是線程的切換

具體的文檔在這里:https://github.com/Kotlin/kotlinx.coroutines/blob/master/coroutines-guide.md

協(xié)程的內(nèi)部是如何工作的?

以下只是簡(jiǎn)單的說(shuō)一說(shuō)邑时,來(lái)自官網(wǎng)

協(xié)程在編譯階段就完成了逛尚,它不需要虛擬機(jī)或者os的支持。

協(xié)程里面被掛起的任務(wù)是通過(guò)代碼轉(zhuǎn)換而成的刁愿。
每個(gè)可被掛起的函數(shù),被增強(qiáng)為一個(gè)狀態(tài)機(jī):這個(gè)狀態(tài)機(jī)記錄當(dāng)前函數(shù)所處環(huán)境的狀態(tài)到逊,若這個(gè)函數(shù)執(zhí)行完畢铣口,狀態(tài)機(jī)依據(jù)當(dāng)前的狀態(tài)恢復(fù)被掛起之前的環(huán)境。

建議看下我的這篇文章:同步編程 vs 異步編程

關(guān)于協(xié)程中的API

kotlin中的協(xié)程目前還處于試驗(yàn)性階段觉壶。
kotlin標(biāo)準(zhǔn)庫(kù)提供了最基本的api脑题。
想要使用一些奇技淫巧,目前有一些支持庫(kù)可供參考:

  1. kotlinx.coroutines
  2. AsyncAwait

參考

  1. coroutines
  2. kotlinx.coroutines
  3. kotlin-coroutines-informal

文章寫的還不完善铜靶,好多地方?jīng)]有提到叔遂,后續(xù)繼續(xù)更新他炊。

白話kotlin系列

  1. 白話kotlin:向空指針異常說(shuō)再見
  2. 白話kotlin:lambda表達(dá)式和高階函數(shù)是什么玩意?
  3. 白話kotlin:內(nèi)聯(lián)函數(shù)助你提升運(yùn)行效率
  4. 白話kotlin:用協(xié)程來(lái)愉快的處理異步問(wèn)題
  5. 白話kotlin:有意思的拓展
  6. 白話kotlin:簡(jiǎn)單的理解 關(guān)鍵詞object
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末已艰,一起剝皮案震驚了整個(gè)濱河市痊末,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哩掺,老刑警劉巖凿叠,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異嚼吞,居然都是意外死亡盒件,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門舱禽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)炒刁,“玉大人,你說(shuō)我怎么就攤上這事誊稚∠枋迹” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵片吊,是天一觀的道長(zhǎng)绽昏。 經(jīng)常有香客問(wèn)我,道長(zhǎng)俏脊,這世上最難降的妖魔是什么全谤? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮爷贫,結(jié)果婚禮上认然,老公的妹妹穿的比我還像新娘。我一直安慰自己漫萄,他們只是感情好卷员,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著腾务,像睡著了一般毕骡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上岩瘦,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天未巫,我揣著相機(jī)與錄音,去河邊找鬼启昧。 笑死叙凡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的密末。 我是一名探鬼主播握爷,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼跛璧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了新啼?” 一聲冷哼從身側(cè)響起追城,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎师抄,沒想到半個(gè)月后漓柑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡叨吮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年辆布,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茶鉴。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锋玲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出涵叮,到底是詐尸還是另有隱情惭蹂,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布割粮,位于F島的核電站盾碗,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏舀瓢。R本人自食惡果不足惜廷雅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望京髓。 院中可真熱鬧航缀,春花似錦、人聲如沸堰怨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)备图。三九已至灿巧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間揽涮,已是汗流浹背抠藕。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绞吁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓唬格,卻偏偏與公主長(zhǎng)得像家破,于是被迫代替她去往敵國(guó)和親颜说。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容