簡述
經(jīng)過兩天的學(xué)習(xí)歷程,看遍了國內(nèi)的經(jīng)典博客,也看完了官方的文檔。下面推薦大家閱讀
如果英文夠好,推薦看官網(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í)行代碼
效果
2. 并發(fā)執(zhí)行 并且分別延遲1秒彻采,3秒
效果
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
6. 協(xié)程中切換到android UI 線程
思路:用handler實現(xiàn)偿渡,在協(xié)程中只需要將Handler作為協(xié)程的上下文臼寄,并獲取主線程的looper就行了
代碼實現(xiàn):
使用:給協(xié)程傳入UI上下文即可
總結(jié)
線程是進(jìn)程的最小單位,那么協(xié)程是線程的最小單位溜宽,而且協(xié)程可以在不同線程中隨意跳轉(zhuǎn)吉拳,還有更高級的玩法,協(xié)程間的通信适揉,協(xié)程間的選擇留攒,協(xié)程之間數(shù)據(jù)共享,后期再繼續(xù)更新更高級的玩法嫉嘀。
在這特別聲明一點: 協(xié)程之間同時操作一個變量的時候炼邀,也是要考慮并發(fā)對變量的影響的,這點跟多線程一樣剪侮,解決辦法也類似拭宁,但不會阻塞線程。總結(jié)優(yōu)點很多杰标,很值得去用兵怯。