返回

ViewModel 是如何保存和恢复?

Android

简介

ViewModel 是 Android Jetpack 架构组件之一,用于在配置更改(例如设备旋转)后保存和恢复 UI 状态。ViewModel 独立于视图,因此可以与不同的视图一起使用。

保存数据

要保存数据,可以在 onSaveInstanceState() 方法中使用 Bundle 对象。例如:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    // 保存数据到 Bundle 对象
    outState.putString("myKey", "myValue");
}

恢复数据

要恢复数据,可以在 onRestoreInstanceState() 方法中使用 Bundle 对象。例如:

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

    // 从 Bundle 对象中恢复数据
    String myValue = savedInstanceState.getString("myKey");
}

使用 ViewModel 保存和恢复数据

ViewModel 提供了更简单的方法来保存和恢复数据。要使用 ViewModel 保存数据,只需在 ViewModel 类中创建一个字段。例如:

public class MyViewModel extends ViewModel {

    private String myValue;

    public String getMyValue() {
        return myValue;
    }

    public void setMyValue(String myValue) {
        this.myValue = myValue;
    }
}

然后,可以在活动或片段中使用 ViewModel 对象来保存和恢复数据。例如:

// 获取 ViewModel 对象
MyViewModel viewModel = ViewModelProviders.of(this).get(MyViewModel.class);

// 保存数据
viewModel.setMyValue("myValue");

// 恢复数据
String myValue = viewModel.getMyValue();

ViewModel 的 onCleared() 方法

ViewModel 类还提供了一个 onCleared() 方法,当 ViewModel 被销毁时会调用该方法。这可以用来清理资源,例如关闭数据库连接或网络连接。

@Override
protected void onCleared() {
    super.onCleared();

    // 清理资源
    database.close();
    networkClient.close();
}

结论

ViewModel 是一个强大的工具,可以用来保存和恢复数据。它使开发人员能够轻松地处理配置更改,例如设备旋转。