日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Android Jetpack架構組件 ViewModel詳解

瀏覽:189日期:2022-09-23 13:34:38

前言

前面兩篇文章我們已經學習了Lifecycle和DataBind,本篇文章我們來學習Jetpack系列中比較重要的ViewModel,Jetpack的很多很多組件都是搭配使用的,所以單獨的知識點可能會有些”無意義“但卻是我們項目實戰的基礎!

ViewModel的使用

ViewModel類旨在以注重生命周期的方式存儲和管理界面相關的數據。ViewModel類讓數據可在發生屏幕旋轉等配置更改后繼續存在。這句話很好理解,還記得我們在講解Lifecycle的時候 舉的例子嗎,我們還是使用那個例子,如果你還沒看過,可移步至:

Android Jetpack系列之Lifecycle

我們再回顧一次需求:

在Activity 可見的時候,我們去做一個計數功能,每隔一秒 將計數加1 ,當Activity不可見的時候停止計數,當Activity被銷毀的時候 將計數置為0,這里我們在Activity被銷毀的時候不再將count置為0,WorkUtil代碼如下所示:

public class WorkUtil implements LifecycleObserver { private static final String TAG = 'WorkUtil'; private boolean whetherToCount = true; private int count = 0; @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) public void start() { new Thread(new Runnable() { @Override public void run() { while (whetherToCount) { try { Thread.sleep(1000); count++; Log.d(TAG, 'start: ' + count); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); } @OnLifecycleEvent(Lifecycle.Event.ON_STOP) public void onStop() { whetherToCount = false; Log.d(TAG, 'onStop: '); } @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) public void onDestory() { }}

我們運行程序,在計數的過程中 使屏幕旋轉,運行結果如下所示:

Android Jetpack架構組件 ViewModel詳解

我們可以看到,當屏幕旋轉的時候,由于生命周期發生了改變,導致數據被銷毀,所以計數器的計數又從初始值開始計數了,那么我們如何解決這個問題呢,你肯定會說,緩存呀,重寫onSabeInstanceState()方法等等,都可以但是都不夠優雅,那么如何優雅的來解決這個問題呢,這就是我們的今天的主角 ViewModel。

ViewModel的使用

我們新建Main3ActivityModel 繼承自 ViewModel,在Main3ActivityModel中定義count變量 如下所示:

public class Main3ActivityViewModel extends ViewModel { public int count = 0; }

沒錯,就是這么簡單,我們只要保證計數的變量是這個model中的變量,就可以解決我們上面的問題

我們通過ViewModelProviders來獲取ViewModel對象

main3ActivityViewModel = ViewModelProviders.of(this).get(Main3ActivityViewModel.class);

但是這個方法已經過時了,替代方法是

main3ActivityViewModel = new ViewModelProvider(this).get(Main3ActivityViewModel.class);

為了讓WorkUtil使用Model中的變量,所以我們要將ViewModel 傳遞過去,在WorkUtil中新增一個構造方法

private Main3ActivityViewModel main3ActivityViewModel; public WorkUtil(Main3ActivityViewModel main3ActivityViewModel) { this.main3ActivityViewModel = main3ActivityViewModel;}

我們將WorkUtil中的計數變量count 改為 main3ActivityViewModel.count,如下所示:

@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)public void start() { new Thread(new Runnable() { @Override public void run() { while (whetherToCount) { try { Thread.sleep(1000); main3ActivityViewModel.count++; Log.d(TAG, 'start: ' + main3ActivityViewModel.count); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start();}

main3Activity中在lifecycle中傳參:

getLifecycle().addObserver(new WorkUtil(main3ActivityViewModel));

再次運行程序,運行過程中旋轉手機屏幕,打印如下所示:

Android Jetpack架構組件 ViewModel詳解

我們可以看到,在屏幕旋轉之后,計數器的計數保留了,那么viewModel是如何做到的呢,這是因為ViewModel 對象存在的時間比視圖或 LifecycleOwners 的特定實例存在的時間更長,ViewModel的生命周期如下圖所示(摘自官網) Android Jetpack架構組件 ViewModel詳解

向ViewModel傳參

當前計數的需求是從0開始計時,我們現在修改需求如下,使用用戶輸入的數字為起點開始計數,這樣的話ViewModel中的count就不是0了,而是傳入的參數,我們在Main3Activity中定義變量inputCount 來模擬用戶輸入的數字

private int inputCount = 100;

在Main3ViewModel中添加構造方法

public int count = 0; public Main3ActivityViewModel(int count) { this.count = count;}

看到這里,你可能會說,我們直接new一個傳過去不就行了嗎,請記住這是萬萬不行的,因為如果我們使用直接實例化來創建ViewModel,那么ViewModel的生命周期就受Activity的影響了,所以為什么我們只能通過ViewModelProvider來獲取ViewModel的實例。

我們需要借助ViewModelProvider.Factory來實現傳參,新建Main3ActivityViewModelFactor繼承自 ViewModelProvider.Factory,重寫其onCreate方法,如下所示:

public class Main3ActivityViewModelFactory implements ViewModelProvider.Factory { @NonNull @Override public <T extends ViewModel> T create(@NonNull Class<T> modelClass) { return null; }}

添加一個構造方法,并在create中創建VideModel實例

private int count; public Main3ActivityViewModelFactory(int count) { this.count = count;} @NonNull@Overridepublic <T extends ViewModel> T create(@NonNull Class<T> modelClass) { return (T) new Main3ActivityViewModel(count);}

在Activity中獲取實例的時候 采用如下方法

main3ActivityViewModel = new ViewModelProvider(this,new Main3ActivityViewModelFactory(inputCount)).get(Main3ActivityViewModel.class);

運行程序,打印結果如下所示: Android Jetpack架構組件 ViewModel詳解

如此一來 我們就實現ViewModel傳遞參數了~

以上就是Android Jetpack架構組件 ViewModel詳解的詳細內容,更多關于Android Jetpack架構組件 ViewModel的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美另类中文字幕| 亚洲福利国产| 国产丝袜一区| 香蕉久久精品| 在线国产精品一区| 国产精品激情电影| 欧美午夜精彩| 国产精品亚洲综合久久| 精品国产中文字幕第一页| 99久久夜色精品国产亚洲狼 | 亚洲精品极品| 精品黄色一级片| 亚洲一级特黄| 国产精品大片| 97精品国产福利一区二区三区| 一区二区国产精品| 日韩av三区| 国产精品综合| 岛国av在线网站| 超碰超碰人人人人精品| 亚洲午夜av| 亚洲精品1区2区| 婷婷综合社区| 亚洲色图网站| 日韩国产91| 日本va欧美va欧美va精品| 国产亚洲一区二区三区啪| 国产欧美视频在线| 日本韩国欧美超级黄在线观看| 国产精品毛片在线| 欧美精品97| 色爱av综合网| 亚洲欧美网站在线观看| 国产精品一页| 久久久影院免费| 蜜臀va亚洲va欧美va天堂| 91精品国产自产精品男人的天堂| 久久av国产紧身裤| 美女毛片一区二区三区四区| 国产精品草草| 日韩高清不卡在线| 免费在线观看精品| 国产成人77亚洲精品www| 午夜在线观看免费一区| 色乱码一区二区三区网站| 日本中文字幕一区二区| 精品一区亚洲| 天堂8中文在线最新版在线| 国产欧美日韩免费观看| 亚洲小说春色综合另类电影| 国产真实久久| 久久九九电影| 国产精品一区三区在线观看| 美女精品一区| 蜜桃久久av一区| av亚洲在线观看| 久久一区二区三区电影| 精品国产乱码久久久久久樱花| 国产日本精品| 97成人超碰| 日韩精品免费视频一区二区三区| 欧美另类综合| 欧美日韩一二| 亚洲福利免费| 好看的av在线不卡观看| 亚洲一区二区三区高清| 亚洲一区二区三区四区五区午夜| 国产资源在线观看入口av| 国产精品国产一区| 丝袜诱惑制服诱惑色一区在线观看 | 成人日韩av| 久久精品99国产国产精| 日韩国产欧美在线视频| 丝袜美腿亚洲一区二区图片| 伊人成人网在线看| 秋霞影视一区二区三区| 中文字幕在线视频久| 精品国产亚洲一区二区三区大结局| 国产亚洲人成a在线v网站| 国产精品亚洲人成在99www| 日日摸夜夜添夜夜添国产精品| 天使萌一区二区三区免费观看| 综合激情五月婷婷| 免费人成网站在线观看欧美高清| 亚洲女同一区| 丝袜国产日韩另类美女| 蜜臀91精品一区二区三区| 夜夜嗨一区二区| 中文国产一区| 中文日韩欧美| 成人日韩在线观看| 1000部精品久久久久久久久| 亚洲黄色影院| 欧美日韩国产高清| 日本一区二区三区中文字幕| 丝袜亚洲另类欧美| 日本欧美一区二区在线观看| 国产精品xxxav免费视频| 美女久久久久久| 国产91久久精品一区二区| 中文字幕亚洲影视| 国产精品久久久网站| 91欧美国产| 久久亚洲美女| 国产日韩精品视频一区二区三区| 国产伦精品一区二区三区视频| 成人在线丰满少妇av| 欧美综合另类| 黑丝美女一区二区| 蜜桃视频第一区免费观看| 久久av国产紧身裤| 蜜桃一区二区三区| 日韩国产在线观看| 免费精品国产| 日韩88av| 免费观看日韩电影| 久久中文字幕一区二区三区| 伊人久久亚洲影院| 不卡在线一区二区| 国产美女亚洲精品7777| 国产精品久久久网站| 国产成人精品免费视| 日韩三区免费| 美女久久久久久| 国产精品入口久久| 国产精品日韩精品中文字幕| 麻豆视频一区| 精品精品99| 日韩国产一区二区| 国产女人18毛片水真多18精品| 最新国产拍偷乱拍精品| 久久国产直播| 国产精品分类| 亚洲永久av| 午夜久久美女| 亚洲午夜91| 一区二区亚洲视频| 欧美亚洲在线日韩| 国产九九精品| 九色精品91| 久久免费精品| 免费一区二区视频| 亚洲成a人片| 中文字幕一区二区av| 国产精品不卡| 日韩精品第一| 91偷拍一区二区三区精品| 欧美久久亚洲| 国产66精品| 婷婷综合六月| 国产探花一区| 98精品久久久久久久| 91精品精品| 亚洲一级网站| 亚洲狼人精品一区二区三区| 国产午夜一区| 久久精品九色| 一区二区三区四区精品视频| 蜜芽一区二区三区| 视频福利一区| 精品中文字幕一区二区三区| 不卡av一区二区| 91精品国产自产在线观看永久∴| 亚洲深深色噜噜狠狠爱网站| 99精品电影| 九九综合在线| 欧美激情福利| 在线日韩电影| 在线精品视频一区| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 欧美激情aⅴ一区二区三区 | 国产一区二区三区亚洲| 老司机精品久久| 国产高清一区二区| 99在线精品免费视频九九视| 久久av网站| 欧美手机在线| 97se综合| 美女久久网站| 欧美日韩一区二区三区不卡视频| 婷婷丁香综合| 亚洲精品一区二区在线看| 国产精品美女| 久久精品中文| 国产视频一区三区| 亚洲美女久久| 国产精品一区二区美女视频免费看| 97久久亚洲| 福利片在线一区二区| 国产麻豆久久| 九九在线精品| 日韩一区免费| 69堂精品视频在线播放| 久久91视频| 美女av在线免费看| 免费av一区| 亚洲精品国产精品粉嫩| 丝瓜av网站精品一区二区| 成人av二区| 欧美 日韩 国产一区二区在线视频|