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ā)對變量的影響的,這點跟多線程一樣,解決辦法也類似,但不會阻塞線程??偨Y(jié)優(yōu)點很多,很值得去用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容