Android夢想導師 2021-09-19 02:43:38 阅读数:970
這是使用MVVM架構模式+Kotlin協程+JetPack(ViewModel+LiveData)+Retrofit的架構,實現WanAndroid登錄接口的小DEMO,後續會慢慢完善WanAndroid客戶端
1、ViewModel?
為了從界面控制器Activity/Fragment邏輯中分離出視圖View數據所有權,架構組件為界面控制器提供了 ViewModel 輔助程序類,該類負責為界面准備數據。在配置更改期間會自動保留 ViewModel 對象,以便它們存儲的數據立即可供下一個 Activity 或 Fragment 實例使用。
2、LiveData?
LiveData 是一種可觀察的數據存儲器類,具有生命周期感知能力,意指它遵循其他應用組件如 Activity、Fragment 或 Service 生命周期,可確保 LiveData 僅更新處於活躍生命周期狀態的應用組件觀察者。LiveData 對象通常存儲在 ViewModel 對象中,並可通過 getter 方法進行訪問。
3、Kotlin協程?
協程依附在線程上,可以實現順序編寫异步代碼,自動進行線程切換。並且ViewModelScope為應用中的每個 ViewModel 定義了 ViewModelScope。如果 ViewModel 已清除,則在此範圍內啟動的協程都會自動取消。
4、Retrofit?
將服務接口中的網絡請求函數聲明為suspend掛起接口函數,以支持Kotlin線程,並將suspend函數結果作為 LiveData 對象傳送。
ViewModel 對象存在的時間範圍是獲取 ViewModel 時傳遞給 ViewModelProvider 的 Lifecycle。ViewModel 將一直留在內存中,直到限定其存在時間範圍的 Lifecycle 永久消失:對於 Activity,是在 Activity 完成時;而對於 Fragment,是在 Fragment 分離時。
使用 LiveData 具有以下優勢:確保界面符合數據狀態
不會發生內存泄漏
不會因 Activity 停止而導致崩潰
數據始終保持最新狀態
適當的配置更改
共享資源
什麼是异步?
但是對於有前後依賴關系的任務,异步該如何處理呢?
為什麼需要异步回調機制?
异步回調機制有什麼缺點?
解决回調地獄的方案有什麼?
在串行的執行中,雖然代碼確實是順序執行的,但其實是在不同的線程上順序執行的。那為什麼在串行的執行中代碼執行順序一致,卻還要使用回調呢?
在並行的執行中,异步回調其實就是代碼的多線程順序執行。那能不能既按照順序的方式編寫代碼,又可以讓代碼在不同的線程順序執行,自動完成線程的切換工作呢?
結論:
那麼協程自動進行線程切換的原理是什麼?
例子:
GlobalScope
JetPack中提供的生命周期感知型協程範圍:
相關鏈接: https://developer.android.google.cn/topic/libraries/architecture/coroutines
launch方法:
源碼:
context
start
block
CoroutineExceptionHandler
Job
suspend關鍵字只起到了標志這個函數是一個耗時操作,必須放在協程中執行的作用,而withContext方法則進行了線程的切換工作。
協程中的代碼自動地切換到其他線程之後又自動地切換回了主線程!順序編寫保證了邏輯上的直觀性,協程的自動線程切換又保證了代碼的非阻塞性。掛起函數必須在協程或者其他掛起函數中被調用,也就是掛起函數必須直接或者間接地在協程中執行。
那為什麼協程中的代碼沒有在主線程中執行呢?而且執行完畢為什麼還會自動地切回主線程呢?
協程的掛起可以理解為協程中的代碼離開協程所在線程的過程,協程的恢複可以理解為協程中的代碼重新進入協程所在線程的過程。協程就是通過的這個掛起恢複機制進行線程的切換。
用async方法包裹了suspend方法來執行並發請求,並發結果都返回之後,切換到主線程,接著再用await方法來獲取並發請求結果。
HTTP接口suspend掛起函數:
kotlin泛型:
這是使用MVVM架構模式+Kotlin協程+JetPack(ViewModel+LiveData)+Retrofit的架構,實現WanAndroid登錄接口的小DEMO,後續會慢慢完善WanAndroid客戶端
為什麼很多程序員做不了架構師?
1、良好健康的職業規劃很重要,但大多數人都忽略了
2、學習的習慣很重要,持之以恒才是正解。
3、編程思維沒能提昇一個臺階,局限在了編碼,業務,沒考慮過選型、擴展
4、身邊沒有好的架構師引導、培養。所處的圈子對程序員的成長影響巨大。
金九銀十面試季,跳槽季,整理面試題已經成了我多年的習慣!在這裏我和身邊一些朋友特意整理了一份快速進階為Android高級工程師的系統且全面的學習資料。涵蓋了Android初級——Android高級架構師進階必備的一些學習技能。
附上:我們之前因為秋招收集的二十套一二線互聯網公司Android面試真題(含BAT、小米、華為、美團、滴滴)和我自己整理Android複習筆記(包含Android基礎知識點、Android擴展知識點、Android源碼解析、設計模式匯總、Gradle知識點、常見算法題匯總。)
裏面包含不同方向的自學編程路線、面試題集合/面經、及系列技術文章等,資源持續更新中…
版权声明:本文为[Android夢想導師]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/09/20210919024337409n.html