Android 架構元件LifeCycle

2021-08-19 23:52:24 字數 2001 閱讀 1452

android.arch.lifecycle提供的類和介面可以讓你構建能感知生命週期(lifecycle-aware)的類。所謂可以感知生命週期就是能夠根據activity或者fragment的生命週期自行調整類的行為。

android系統中定義的大多數元件都是有生命週期的。這些元件的生命週期是由系統管理的。作為乙個開發者必須遵守這些生命週期的規則,否則就會出現記憶體洩漏或者應用崩潰的情況。

例如:我們需要在

activity

中做乙個對位置的監聽:在activity生命週期內 處理呼叫mylocationlistener 的開始與停止方法。

class mylocationlistener  

void start()

void stop() }

); }

public void onstart()  

publicvoid onstop() }

功能再擴充套件一下:如果滿足某種條件,才開始監聽位置的改變

private mylocationlistener mylocationlistener;

public void oncreate(...) ); }

public void onstart() }); }

public void onstop() }

上面的**存在的問題:

邏輯問題:問題1mylocationlistenerstop()方法在start()之前有可能執行了(util.checkuserstatus方法比較耗時),這本身在邏輯上就是不合理的。

問題2  mylocationlistener過一段時間開始執行start(),然後沒有stop的**被呼叫了。這意味著如果沒有其他操作,activity將會一直在後台監聽location的改變。

如何解決上述的問題,以及更好的優化**。android提供了lifecycle元件

如何解決這兩種問題:lifecycle。 **如下

public classmylocationlistenerimplementslifecycleobserver

@onlifecycleevent

(lifecycle.event.on_start

)

voidstart()") ;

if(enabled)

}public voidenable()

}@onlifecycleevent

(lifecycle.event.on_stop

)

voidstop()") ;}}

lifecycle

.addobserver(mylocationlistener(this,this.lifecycle

))

·  保持ui controllers(activity/fragment)中**足夠簡潔。一定不能包含如何獲取資料的**,要通過viewmodel獲取livedata形式的資料。 

·  用資料驅動ui,ui的職責就是根據資料改變顯示的內容,並且把使用者操作ui的行為傳遞給viewmodel。

·  使用databinding來簡化view(布局檔案)和ui controllers(activity/fragment)之間的**

·  如果布局本身太過複雜,可以考慮建立乙個presenter類來處理ui相關的改變。雖然這麼做會多寫很多**,但是對於保持ui的簡介和可測試性是有幫助的。

·  不要在viewmodel中持有任何view/activity的context。否則會造成記憶體洩露。

Android元件化架構

元件化架構需要各個元件不僅能夠單獨執行而且也能無縫的整合到主程式中,在這個過程中會遇到以下問題 todo 在專案的根目錄下的gradle.properties檔案中宣告乙個變數ismodule 該變數能對整個專案中所有的gradle檔案生效 代表是否是元件開發模式。gradle.properties...

android架構學習之元件化

新公司的專案採用了元件化,此前對元件化有過一些研究,但是相關的經驗並不多,正好新的專案有實際運用,在此記錄下元件化的學習與實踐之路。網上元件化的文章很多,本人學習組建化的過程也借鑑了網上先輩們的文章。但大多數文章都從底層的細枝末節開始講述,由下而上給人一種這門技術 博大精深 望而生畏的感覺。而我寫這...

Android元件化開發實踐(二) 元件化架構設計

先說說我自己的元件化架構設計方案,請看下圖 元件化架構設計圖 為了便於理解,按照從下往上的順序來講講我的分層思路。元件之間必須遵循以下規則 現在已經有很多成熟的元件化框架了,比較著名的有阿里的手淘atlas框架但是這些框架可能都過於複雜,上手難度高,對很多人來說並不一定好用。總的說來,沒有最好的架構...