这篇具有很好参考价值的文章主要介绍了SavedStateHandle的介绍----ViewModel不具备保存状态数据的功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。
LiveData本身不能在进程销毁中存活,当内存不足时,Activity被系统杀死,ViewModel本身也会被销毁。
为了保存LiveData的数据,使用SavedStateHandle。
事故场景:
进程销毁后,重新去通过ViewModel去获取LiveData数据,获取到的数据是null。
这表示ViewModel不具备onSavedInstance的功能。
引入SavedStateHandle,进程销毁重建就可以获取到数据:
private SavedStateHandle mState;
public SavedStateViewModel(SavedStateHandle savedStateHandle) {
mState = savedStateHandle;
}
private static final String NAME_KEY = "name";
// Expose an immutable LiveData
LiveData<String> getName() {
return mState.getLiveData(NAME_KEY);
}
void saveNewName(String newName) {
mState.set(NAME_KEY, newName);
}
在上述代码的情况下,进程销毁,ViewModel重建,重新获取LiveData,就不会为为null了。
相比与onSaveInstanceState
不用重写onSaveInstanceState就可以获得保存状态数据的功能,这就是最大的优点。
可以替代Bundle,不需要从Activity获取和发送数据,之前的做法是,数据保存在onSavedInstanceState回调方法中的Bundle,然后重建的时候,通过onCreate方法中的Bundle获取。
SavedStateHandle的效果跟Bundle一样,也是只能保存少量数据。
ViewModel的生命周期:
可以看出ViewModel的生命周期Scope,不包含回调函数onSavedInstanceState
文章来源地址https://www.toymoban.com/news/detail-569183.html
https://medium.com/androiddevelopers/viewmodels-persistence-onsaveinstancestate-restoring-ui-state-and-loaders-fc7cc4a6c090
https://developer.android.com/codelabs/android-lifecycles#6
https://developer.android.com/topic/libraries/architecture/viewmodel/viewmodel-savedstate
https://developer.android.com/codelabs/android-lifecycles#6
文章来源:https://www.toymoban.com/news/detail-569183.html
到了这里,关于SavedStateHandle的介绍----ViewModel不具备保存状态数据的功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!