通過兩天的學習歷程,看遍了國內的經典博客,也看完了官方的文檔。下面推薦你們閱讀android
好的文章:
開始使用Kotlin協程
官方:
kotlinx.coroutinesgit
若是英文夠好,推薦看官網的,例子比較全面。github
本項目源碼地址網絡
學習事後,爲了更進一步,特意封裝一些經常使用API,以便其餘新手學習使用。接下來將完成下面一個個計劃功能多線程
1. 順序執行 task1,task2
2. 併發執行 task1,task2
3. 等待執行 task2 需等待 task1執行完畢後執行
4. 延遲執行 task1 須要10秒以後執行
5. 心跳執行 異步任務按指定間隔執行 Task
6. 任務執行感知生命週期,能夠跟隨當前activity的生命週期結束而自動結束,並能夠配置是否在從新打開activity時是否要從新執行
7. 任務執行可選主線程仍是子線程
8. 任務執行能夠選擇 須要網絡或者不須要網絡
9. 任務執行能夠選擇網絡制式4G 或者wifi下執行(5.0以上特性)
10.任務能夠選擇在充電時執行(5.0以上特性)
11. 任務執行能夠隨時取消,能夠取消全部當前任務併發
目前框架已經作到前7項計劃,後續將逐漸完善。框架
代碼異步
效果ide
順序執行效果圖oop
代碼
效果
併發效果圖
代碼
效果
等待效果圖
代碼
效果
心跳效果圖
實現步驟:
(1)建立一個JobHolder,用於保存job屬性
(2)擴展View,添加contextJob屬性,從View的上下文中也就是JobHolder的實現類中拿到Job對象,再擴展View的onClick事件,在事件中建立協程,並將Job做爲協程的上下文傳入給該協程,就能夠被job取消了
(3)讓Activity實現JobHolder,負責建立Job對象,並在生命週期結束的時候結束掉Job
JobHolder
擴展()
生命週期綁定
思路:用handler實現,在協程中只須要將Handler做爲協程的上下文,並獲取主線程的looper就好了
代碼實現:
代碼
使用:給協程傳入UI上下文便可
主線程切換實現
線程是進程的最小單位,那麼協程是線程的最小單位,並且協程能夠在不一樣線程中隨意跳轉,還有更高級的玩法,協程間的通訊,協程間的選擇,協程之間數據共享,後期再繼續更新更高級的玩法。 在這特別聲明一點: 協程之間同時操做一個變量的時候,也是要考慮併發對變量的影響的,這點跟多線程同樣,解決辦法也相似,但不會阻塞線程。總結優勢不少,很值得去用。