ViewModelProvider
是 Android Jetpack 中的一個類,用于管理和提供 ViewModel
實例。它可以幫助我們在應用的生命周期中正確地管理 ViewModel
,避免因為生命周期變化導致的內存泄漏和數據丟失。
在 Android 中,ViewModelProvider
主要與 Activity
和 Fragment
的生命周期緊密相關。當 Activity
或 Fragment
被創建時,ViewModelProvider
會根據其關聯的 Lifecycle
對象來創建或獲取一個 ViewModel
實例。當 Activity
或 Fragment
被銷毀時,ViewModelProvider
會自動釋放與該實例相關的資源。
以下是如何在 Activity
和 Fragment
中使用 ViewModelProvider
的示例:
Activity
中使用 ViewModelProvider
:public class MainActivity extends AppCompatActivity {
private MyViewModel myViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 創建 ViewModelProvider 實例
ViewModelProvider viewModelProvider = new ViewModelProvider(this);
// 獲取 ViewModel 實例
myViewModel = viewModelProvider.get(MyViewModel.class);
// 使用 ViewModel 實例
}
}
Fragment
中使用 ViewModelProvider
:public class MyFragment extends Fragment {
private MyViewModel myViewModel;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 創建 ViewModelProvider 實例
ViewModelProvider viewModelProvider = new ViewModelProvider(requireActivity());
// 獲取 ViewModel 實例
myViewModel = viewModelProvider.get(MyViewModel.class);
}
}
注意,在 Fragment
中,我們使用 requireActivity()
而不是直接使用 getActivity()
。這是因為 requireActivity()
會在 Activity
不存在時拋出異常,而 getActivity()
可能會返回 null
。這可以確保我們在使用 myViewModel
之前,Activity
已經存在。
總之,ViewModelProvider
可以幫助我們處理 Android 應用中的生命周期問題,讓我們能夠在不同的生命周期階段正確地創建和使用 ViewModel
實例。