該系列文章從androidx,jetpack開始對安卓技術(shù)做一遍更新梳理抗蠢。因入行較早公司技術(shù)又相對比較老褒繁,目前技術(shù)已經(jīng)陳舊到再不升級亦鳞,即使不需要后浪,自己也可以把自己拍死了棒坏。技術(shù)梳理以Kotlin作為開發(fā)語言前提燕差。首先從了解Androidx相關依賴庫開始切入。
第一步:需要關注的就是Activity和Fragment
androidx.core庫中引入CompnentActivity坝冕,作為所有新框架的積累庫徒探,拓展了LifecycleOwner和KeyEventDispatcher.Component接口。
androidx.activity庫喂窟,引用了core中的CompnentActivity测暗,名稱相同,作為基類使用谎替,主要實現(xiàn)Lifecycle偷溺、ViewModel等jetpack相關框架的集成蹋辅。
androidx.activity拓展activity-ktx庫钱贯,添加了兩個Kotlin擴展方法,不對整體Activity結(jié)構(gòu)造成影響侦另。
androidx.fragment框架中FragmentActivity使用androidx.activity中CompnentActivity秩命,不再使用系統(tǒng)中自帶的Fragment,以及support中Fragment褒傅。主要對Fragment進行相關管理弃锐。
android.appcompat包中的AppCompatActivity繼承自FragmentActivity。主要添加ActionBar等AppCompat相關特性殿托。開發(fā)應用時主要繼承該Activity.霹菊。繼承后可使用Jetpack、Appcompat等系列框架特性支竹。應用開發(fā)中Fragment主要繼承androidx.fragment中Fragment旋廷。
第二步:了解了Fragment和Activity的相關關聯(lián)關系之后就可以開始Jetpack具體組件相關的開發(fā)了。最先需要使用和梳理的就是Lifecycle礼搁、ViewModel和Livedata饶碘。按照谷推薦框架,還需要使用Room框架馒吴,目前從關聯(lián)關系及對項目的框架影響考慮扎运,該框架可分開獨立研究瑟曲,不影響整體使用。其中最基礎的是Lifecycle豪治,因viewmodel和livedata對lifecycle有依賴洞拨。
首先,研究Lifecycle的使用及源碼邏輯负拟。在第一步中已經(jīng)描述到框架中基礎Activity已經(jīng)實現(xiàn)了Lifecycle相關接口扣甲,這其中包括基礎Fragment也已經(jīng)實現(xiàn)相關接口。Lifecycle最主要的組成部分為:LifecycleOwner齿椅、LifecycleObserver琉挖。原理為使用觀察者模式,因Activity及Fragment已經(jīng)實現(xiàn)了LIfecycleOwner涣脚,我們不需要關注該實現(xiàn)步驟示辈,直接將Activity\Fragment認定為被觀察者。開發(fā)只需要實現(xiàn)觀察者即可遣蚀。實現(xiàn)步驟為:1矾麻、創(chuàng)建一個實現(xiàn)了LifecycleObserver接口的類,將需要觀察的某個生命周期用注解的方式標注芭梯,如:@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)险耀、 @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)、@OnLifecycleEvent(Lifecycle.Event.ON_ANY)玖喘,2甩牺、將該類注冊到被觀察者中,用于將觀察者與被觀察者建立關聯(lián)關系累奈。代碼如:getLifecycle().addObserver(XXX) 完成以上步驟即可在被觀察者發(fā)生相應的生命周期變動時贬派,在觀察者類中收到相關生命周期變化的通知。
其次需要梳理Viewmodel澎媒,該框架背后的MVVM思想的使用涉及的開發(fā)語言范圍已經(jīng)很廣泛搞乏。在其他開發(fā)體系中已經(jīng)有大量實踐。在前端研發(fā)及設計中參考數(shù)據(jù)驅(qū)動視圖思想及實現(xiàn)方案戒努,已經(jīng)成為前端研發(fā)的必經(jīng)之路请敦。主要組成部分為ViewModelStoreOwner、ViewModelProvider储玫。其中框架中Activity/Fragment已繼承實現(xiàn)ViewModelStoreOwner侍筛。該接口持有ViewModelStore,而ViewModelStore持有該頁面中的ViewModel缘缚。需要使用或者實現(xiàn)VIewModel時勾笆,通過ViewModelProvider來實例化一個XXXVIewModel(繼承VIewModel)及將其與容器相關聯(lián),
java實現(xiàn)方式new ViewModelProvider(getActivity()/this).get(XXXViewModel.class)
kotlin實現(xiàn)方式:by viewModels<XXXViewModel>
該邏輯的實現(xiàn)意味著你可以在容器中找到和使用一份獨立的數(shù)據(jù)而無需擔心數(shù)據(jù)受頁面生命周期相關的影響桥滨。viewmodel作為view與model之間的橋梁窝爪。將model綁定到view的全生命周期中弛车。需要使用數(shù)據(jù)時直接通過viewmodel獲取即可。
最后需要梳理LiveData蒲每,同樣使用觀察者模式纷跛,被觀察者為LifecycleOwner,框架中已經(jīng)實現(xiàn)該接口邀杏。觀察者為LiveData贫奠,LiveData中的數(shù)據(jù)從泛型約束中傳入。建立關聯(lián)關系的方式為1望蜡、實例化LiveData唤崭、2、liveData.observer(被觀察者,觀察callback)脖律。當數(shù)據(jù)發(fā)生變化時被觀察者通知數(shù)據(jù)發(fā)生變更livedata.setValue(數(shù)據(jù)變化)谢肾。整個原理及實現(xiàn)架構(gòu)同lifevycle類似。
第三部:代碼實戰(zhàn)小泉。
以上框架模塊均在lifecycle庫中芦疏。所以放在一起學習,掌握了基本的項目框架組件就可以開始項目實戰(zhàn)了微姊。推薦谷歌官方demo酸茴,當遇到其他庫方法時,可以直接學習了解相關庫兢交。新項目引入androidx薪捍,在實戰(zhàn)過程中,穿插學習其他androidx庫魁淳。