kotlin協(xié)程簡單封裝

簡述

經(jīng)過兩天的學(xué)習(xí)歷程,看遍了國內(nèi)的經(jīng)典博客,也看完了官方的文檔。下面推薦大家閱讀

好的文章:
開始使用Kotlin協(xié)程
官方:
kotlinx.coroutines

如果英文夠好,推薦看官網(wǎng)的,例子比較全面椿访。

本項目源碼地址

計劃

學(xué)習(xí)過后,為了更進(jìn)一步虑润,特地封裝一些常用API成玫,以便其他新手學(xué)習(xí)使用。接下來將完成下面一個個計劃功能

1.? 順序執(zhí)行 task1拳喻,task2
2. 并發(fā)執(zhí)行 task1哭当,task2
3. 等待執(zhí)行 task2 需等待 task1執(zhí)行完畢后執(zhí)行
4. 延遲執(zhí)行 task1 需要10秒之后執(zhí)行
5. 心跳執(zhí)行 異步任務(wù)按指定間隔執(zhí)行 Task
6. 任務(wù)執(zhí)行感知生命周期,可以跟隨當(dāng)前activity的生命周期結(jié)束而自動結(jié)束冗澈,并可以配置是否在重新打開activity時是否要重新執(zhí)行
7. 任務(wù)執(zhí)行可選主線程還是子線程
8. 任務(wù)執(zhí)行可以選擇 需要網(wǎng)絡(luò)或者不需要網(wǎng)絡(luò)
9. 任務(wù)執(zhí)行可以選擇網(wǎng)絡(luò)制式4G 或者wifi下執(zhí)行(5.0以上特性)
10.任務(wù)可以選擇在充電時執(zhí)行(5.0以上特性)
11. 任務(wù)執(zhí)行可以隨時取消钦勘,可以取消所有當(dāng)前任務(wù)

目前框架已經(jīng)做到前7項計劃,后續(xù)將逐漸完善亚亲。

代碼演示

1. 順序執(zhí)行代碼

代碼

效果

順序執(zhí)行效果圖

2. 并發(fā)執(zhí)行 并且分別延遲1秒彻采,3秒

代碼

效果

并發(fā)效果圖

3. 等待執(zhí)行

代碼

效果

等待效果圖

4. 心跳

代碼

效果

心跳效果圖

5. Activity 生命周期感知

實現(xiàn)步驟:

(1)創(chuàng)建一個JobHolder,用于保存job屬性

(2)擴(kuò)展View捌归,添加contextJob屬性肛响,從View的上下文中也就是JobHolder的實現(xiàn)類中拿到Job對象,再擴(kuò)展View的onClick事件陨溅,在事件中創(chuàng)建協(xié)程终惑,并將Job作為協(xié)程的上下文傳入給該協(xié)程,就可以被job取消了

(3)讓Activity實現(xiàn)JobHolder门扇,負(fù)責(zé)創(chuàng)建Job對象,并在生命周期結(jié)束的時候結(jié)束掉Job

JobHolder
擴(kuò)展()
生命周期綁定

6. 協(xié)程中切換到android UI 線程

思路:用handler實現(xiàn)偿渡,在協(xié)程中只需要將Handler作為協(xié)程的上下文臼寄,并獲取主線程的looper就行了

代碼實現(xiàn):

代碼

使用:給協(xié)程傳入UI上下文即可

主線程切換實現(xiàn)

總結(jié)

線程是進(jìn)程的最小單位,那么協(xié)程是線程的最小單位溜宽,而且協(xié)程可以在不同線程中隨意跳轉(zhuǎn)吉拳,還有更高級的玩法,協(xié)程間的通信适揉,協(xié)程間的選擇留攒,協(xié)程之間數(shù)據(jù)共享,后期再繼續(xù)更新更高級的玩法嫉嘀。
在這特別聲明一點: 協(xié)程之間同時操作一個變量的時候炼邀,也是要考慮并發(fā)對變量的影響的,這點跟多線程一樣剪侮,解決辦法也類似拭宁,但不會阻塞線程。總結(jié)優(yōu)點很多杰标,很值得去用兵怯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市腔剂,隨后出現(xiàn)的幾起案子媒区,更是在濱河造成了極大的恐慌,老刑警劉巖掸犬,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件袜漩,死亡現(xiàn)場離奇詭異,居然都是意外死亡登渣,警方通過查閱死者的電腦和手機噪服,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胜茧,“玉大人粘优,你說我怎么就攤上這事∩胪纾” “怎么了雹顺?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長廊遍。 經(jīng)常有香客問我嬉愧,道長,這世上最難降的妖魔是什么喉前? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任没酣,我火速辦了婚禮,結(jié)果婚禮上卵迂,老公的妹妹穿的比我還像新娘裕便。我一直安慰自己,他們只是感情好见咒,可當(dāng)我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布偿衰。 她就那樣靜靜地躺著,像睡著了一般改览。 火紅的嫁衣襯著肌膚如雪下翎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天宝当,我揣著相機與錄音视事,去河邊找鬼。 笑死今妄,一個胖子當(dāng)著我的面吹牛郑口,可吹牛的內(nèi)容都是我干的鸳碧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼犬性,長吁一口氣:“原來是場噩夢啊……” “哼瞻离!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起乒裆,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤套利,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鹤耍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肉迫,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年稿黄,在試婚紗的時候發(fā)現(xiàn)自己被綠了喊衫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡杆怕,死狀恐怖族购,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情陵珍,我是刑警寧澤寝杖,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站互纯,受9級特大地震影響瑟幕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜留潦,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一只盹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧兔院,春花似錦鹿霸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钻哩。三九已至屹堰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間街氢,已是汗流浹背扯键。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留珊肃,地道東北人荣刑。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓馅笙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親厉亏。 傳聞我的和親對象是個殘疾皇子董习,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,515評論 2 359

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