偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Android開發(fā)中ViewModel和AndroidViewModel:兄弟倆的差異

移動開發(fā) Android
在Android開發(fā)的奇妙世界里,ViewModel和AndroidViewModel就像一對雙胞胎兄弟,都肩負著保護數(shù)據(jù)不被"屏幕旋轉"等意外摧毀的使命。但仔細觀察你會發(fā)現(xiàn),哥哥ViewModel出門只帶錢包,而弟弟AndroidViewModel總背著一個神奇的萬能背包!

在Android開發(fā)的奇妙世界里,ViewModelAndroidViewModel就像一對雙胞胎兄弟??,都肩負著保護數(shù)據(jù)不被"屏幕旋轉"等意外摧毀的使命。但仔細觀察你會發(fā)現(xiàn),哥哥ViewModel出門只帶錢包,而弟弟AndroidViewModel總背著一個神奇的萬能背包??!

兄弟倆的不同"裝備"

ViewModel - 輕裝上陣的哥哥

public class LightweightViewModel extends ViewModel {
    // 瞧!連背包都不帶
    private int clickCount=0;
    
    // 記錄用戶點擊次數(shù)
    public void recordClick() {
        clickCount++;
        System.out.println("點擊次數(shù):" + clickCount);
    }
}

說明:就像出門只帶錢包的哥哥,ViewModel構造簡單輕便(沒有參數(shù))。擅長處理純數(shù)據(jù)任務,比如計數(shù)、狀態(tài)跟蹤等不需要特殊工具的工作。不能直接接觸Android世界的工具(如SharedPreferences),需要別人幫忙傳遞。

AndroidViewModel - 裝備齊全的弟弟

public class FeatureRichViewModel extends AndroidViewModel {
    // 看!它背著神奇的Application背包
    private SharedPreferences prefs;
    
    public FeatureRichViewModel(Application app) {
        super(app);
        // 從背包里取出共享首選項工具
        prefs = app.getSharedPreferences("user_prefs", Context.MODE_PRIVATE);
    }
    
    // 保存用戶設置
    public void saveUserSetting(String key, String value) {
        prefs.edit().putString(key, value).apply();
        System.out.println("已保存設置:" + key + "=" + value);
    }
}

說明:弟弟AndroidViewModel的萬能背包(Application參數(shù))里裝著各種Android專屬工具??梢灾苯硬僮?/span>SharedPreferences這類系統(tǒng)級工具,不需要別人轉交。但要注意:背包雖好,別往里面塞Activity等易碎品哦!

使用場景PK

場景1:記錄按鈕點擊次數(shù)

// 使用哥哥ViewModel正合適
public class ClickCounterViewModel extends ViewModel {
    private MutableLiveData<Integer> count = new MutableLiveData<>(0);
    
    public void increaseCount() {
        count.setValue(count.getValue() + 1);
    }
}

適用場合:這種純計數(shù)的簡單任務,哥哥ViewModel就能完美搞定!它輕便高效,像只帶手機出門一樣方便。

場景2:保存用戶主題設置

// 請出弟弟AndroidViewModel
public class ThemeViewModel extends AndroidViewModel {
    private SharedPreferences prefs;
    
    public ThemeViewModel(Application app) {
        super(app);
        prefs = app.getSharedPreferences("theme_prefs", 0);
    }
    
    public void saveTheme(String themeName) {
        prefs.edit().putString("current_theme", themeName).apply();
    }
}

適用場合:需要操作SharedPreferences這類系統(tǒng)工具時,弟弟的萬能背包就派上用場了!它能直接訪問應用資源,省去中間傳遞的麻煩。

選擇指南:何時召喚誰?

場景特征

召喚對象

示例

不需要Android工具

ViewModel

計數(shù)器、數(shù)據(jù)轉換器

需要Application級別資源

AndroidViewModel

訪問SharedPreferences

需要生命周期感知但不涉及UI

ViewModel

網(wǎng)絡請求狀態(tài)跟蹤

需要讀取系統(tǒng)配置

AndroidViewModel

獲取系統(tǒng)語言設置

使用秘訣 ??

兄弟搭配干活不累:在Fragment間用ViewModel共享數(shù)據(jù),需要資源時用AndroidViewModel

背包安全守則:永遠不要在ViewModel中持有ActivityView的引用

精簡原則:能用哥哥就不要麻煩弟弟,保持代碼輕量化

工具傳遞術:如果需要資源但不想用AndroidViewModel,可以通過構造函數(shù)傳遞工具實例

// 通過參數(shù)傳遞工具(代替使用AndroidViewModel)
public class SafePrefsViewModel extends ViewModel {
    private SharedPreferences prefs;
    
    // 安全地獲取工具而不背背包
    public SafePrefsViewModel(SharedPreferences prefs) {
        this.prefs = prefs;
    }
}

兄弟倆各有千秋:

ViewModel:輕便的數(shù)據(jù)管家,專注業(yè)務邏輯

AndroidViewModel:工具達人,可直接使用應用資源

"輕量數(shù)據(jù)找哥哥,需要工具弟弟行。莫把背包當倉庫,各司其職最聰明!"

現(xiàn)在,你已經(jīng)掌握召喚這對神奇兄弟的秘訣了!快去Android世界施展魔法吧

責任編輯:武曉燕 來源: 沐雨花飛碟
相關推薦

2024-03-15 15:03:23

2023-07-08 23:22:51

量子位

2019-03-28 14:35:53

IPv6IPv4TCP

2019-04-22 15:24:24

HadoopSuffleMap端

2019-08-07 11:00:07

程序員技能開發(fā)者

2017-03-09 19:10:06

Android ThAndroid物聯(lián)網(wǎng)

2023-12-18 08:24:56

ViewModel數(shù)據(jù)操作Android

2024-08-26 08:36:26

2025-01-13 00:17:49

Java開發(fā)對象

2018-12-06 10:56:20

AndroidLinux系統(tǒng)

2018-03-30 12:40:10

潤乾差異數(shù)據(jù)

2021-06-26 06:29:14

Vue 2Vue 3開發(fā)

2011-03-29 23:17:36

KindleAndroid硬件

2010-06-23 14:20:06

eMule協(xié)議

2013-11-04 17:01:34

容錯選型

2016-12-08 10:03:38

AndroidMVP架構

2024-03-01 08:23:39

2020-10-15 11:22:34

PyTorchTensorFlow機器學習

2013-11-27 11:04:05

震網(wǎng)病毒震網(wǎng)Stuxnet

2009-06-16 13:22:59

SqlConnecti
點贊
收藏

51CTO技術棧公眾號