欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新

SavedStateHandle的介绍----ViewModel不具备保存状态数据的功能,为了保存LiveDa

来源: 开发者 投稿于  被查看 3515 次 评论:54

SavedStateHandle的介绍----ViewModel不具备保存状态数据的功能,为了保存LiveDa


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://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   版权声明: 作者:ttylinux     出处:http://www.cnblogs.com/ttylinux/     本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

用户评论