Android開(kāi)發(fā)中的ViewModel使用實(shí)戰(zhàn)案例
前言
在Android應(yīng)用開(kāi)發(fā)中,ViewModel作為架構(gòu)組件之一,扮演著管理UI數(shù)據(jù)和生命周期的關(guān)鍵角色。本文將深入探討ViewModel如何感知View的生命周期,并分析其內(nèi)核原理,幫助開(kāi)發(fā)者更好地利用ViewModel優(yōu)化應(yīng)用架構(gòu)。
一、ViewModel簡(jiǎn)介
在Android開(kāi)發(fā)中,隨著應(yīng)用復(fù)雜度的提升,如何有效管理UI組件的生命周期和數(shù)據(jù)成為了一個(gè)挑戰(zhàn)。ViewModel作為Android Architecture Components的一部分,應(yīng)運(yùn)而生。它允許我們存儲(chǔ)和管理與UI相關(guān)的數(shù)據(jù),同時(shí)在配置更改(如屏幕旋轉(zhuǎn))時(shí),保持?jǐn)?shù)據(jù)的持續(xù)性。
二、ViewModel的核心優(yōu)勢(shì)
- 生命周期感知:ViewModel能夠感知到其宿主Activity或Fragment的生命周期,確保在適當(dāng)?shù)臅r(shí)候進(jìn)行數(shù)據(jù)的保存和恢復(fù)。
- 數(shù)據(jù)持久化:ViewModel能夠在Activity或Fragment重建時(shí),保持其內(nèi)部狀態(tài),避免因生命周期變化導(dǎo)致的數(shù)據(jù)丟失。
- 與UI層解耦:ViewModel獨(dú)立于UI層,使得業(yè)務(wù)邏輯與UI展示分離,提高了代碼的可維護(hù)性和可測(cè)試性。

上圖左側(cè)為 Activity 的生命周期過(guò)程,期間有一個(gè)旋轉(zhuǎn)屏幕的操作;右側(cè)則為
ViewModel 的生命周期過(guò)程。
三、ViewModel如何感知生命周期
ViewModel通過(guò)與Activity或Fragment的生命周期掛鉤,來(lái)感知生命周期的變化。當(dāng)Activity或Fragment被銷毀時(shí),關(guān)聯(lián)的ViewModel會(huì)暫停數(shù)據(jù)更新,直到新的Activity或Fragment重新綁定并請(qǐng)求數(shù)據(jù)。
四、ViewModel內(nèi)核原理
初始化:當(dāng)Activity或Fragment創(chuàng)建時(shí),ViewModel通過(guò)
ViewModelProvider初始化。ViewModelProvider負(fù)責(zé)創(chuàng)建和維護(hù)ViewModel的實(shí)例。數(shù)據(jù)存儲(chǔ):ViewModel內(nèi)部可以使用LiveData、MutableLiveData等數(shù)據(jù)存儲(chǔ)類,來(lái)存儲(chǔ)和管理UI相關(guān)的數(shù)據(jù)。
五、實(shí)戰(zhàn)案例
以下是一個(gè)簡(jiǎn)單的ViewModel使用示例:
public class MyViewModel extends ViewModel {
private MutableLiveData<String> myData = new MutableLiveData<>();
public LiveData<String> getData() {
return myData;
}
public void setData(String data) {
myData.setValue(data);
}
}
// 在Activity中使用ViewModel
public class MyActivity extends AppCompatActivity {
private MyViewModel myViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
myViewModel = new ViewModelProvider(this).get(MyViewModel.class);
myViewModel.getData().observe(this, new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
// 更新UI
}
});
// 設(shè)置數(shù)據(jù)
myViewModel.setData("Hello, ViewModel!");
}
}六、總結(jié)
ViewModel作為Android架構(gòu)組件之一,為管理UI相關(guān)數(shù)據(jù)和生命周期提供了強(qiáng)大的支持。通過(guò)理解ViewModel的生命周期感知機(jī)制和內(nèi)核原理,我們可以更好地構(gòu)建健壯、高效的Android應(yīng)用。
到此這篇關(guān)于Android開(kāi)發(fā)中ViewModel使用實(shí)戰(zhàn)的文章就介紹到這了,更多相關(guān)Android開(kāi)發(fā)ViewModel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android?無(wú)障礙服務(wù)?performAction?調(diào)用過(guò)程分析
這篇文章主要介紹了Android?無(wú)障礙服務(wù)?performAction?調(diào)用過(guò)程分析,無(wú)障礙服務(wù)可以模擬一些用戶操作,無(wú)障礙可以處理的對(duì)象,通過(guò)類?AccessibilityNodeInfo?表示,通過(guò)無(wú)障礙服務(wù),可以通過(guò)它的performAction方法來(lái)觸發(fā)一些action2022-06-06
android 版本檢測(cè) Android程序的版本檢測(cè)與更新實(shí)現(xiàn)介紹
做個(gè)網(wǎng)站的安卓客戶端,用戶安裝到自己手機(jī)上,如果我出了新版本怎么辦呢?要有版本更新功能,感興趣的朋友可以了解下2013-01-01
Android實(shí)現(xiàn)app應(yīng)用多語(yǔ)言切換功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)app應(yīng)用多語(yǔ)言切換功能的相關(guān)資料,類似于微信的語(yǔ)言切換,感興趣的小伙伴們可以參考一下2016-08-08
Android編程之監(jiān)聽(tīng)器用法實(shí)例分析
這篇文章主要介紹了Android編程之監(jiān)聽(tīng)器用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android監(jiān)聽(tīng)器的功能及針對(duì)短信的監(jiān)聽(tīng)與響應(yīng)操作技巧,需要的朋友可以參考下2016-01-01
Kotlin?Flow數(shù)據(jù)流的3種使用場(chǎng)景詳解
這篇文章主要為大家詳細(xì)介紹了Kotlin中Flow數(shù)據(jù)流的幾種使用場(chǎng)景,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下2023-04-04
Android實(shí)現(xiàn)側(cè)滑菜單DrawerLayout
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)側(cè)滑菜單DrawerLayout,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05
Android自定義View實(shí)現(xiàn)自動(dòng)吸附功能
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)自動(dòng)吸附功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-01-01

