Android开发——设计一个全局可调用的ViewModel对象

思路步骤

  1. 创建一个全局的ViewModelProvider.Factory对象: 在应用的主Application类中创建一个全局的ViewModelProvider.Factory对象,用于创建和管理ViewModel实例。
  2. 在需要使用ViewModel的Activity或Fragment中获取ViewModel实例: 通过ViewModelProvider来获取ViewModel实例。可以在Activity或Fragment中创建一个ViewModel的成员变量,并在onCreate方法中初始化。
  3. 确保获取的ViewModel实例是同一个对象: 通过使用相同的ViewModelProvider和ViewModelProvider.Factory对象,可以确保获取的ViewModel实例是同一个对象,实现全局共享。
  4. 处理ViewModel的生命周期: ViewModel的生命周期与Activity或Fragment的生命周期相关联。当Activity或Fragment被销毁时,ViewModel的onCleared方法将会被调用,可以在这个方法中释放资源。

案例示例

要设计一个全局可调用的ViewModel对象,可以使用Android Jetpack中的ViewModel和ViewModelProvider来实现。

首先,需要在应用的主Application类中创建一个全局的ViewModelProvider.Factory对象。这个Factory对象将用于创建和管理ViewModel实例。

public class MyApplication extends Application {
​
    private ViewModelProvider.Factory viewModelFactory;
​
    @Override
    public void onCreate() {
        super.onCreate();
​
        viewModelFactory = new ViewModelProvider.AndroidViewModelFactory(this);
    }
​
    public ViewModelProvider.Factory getViewModelFactory() {
        return viewModelFactory;
    }
}

在需要使用ViewModel的Activity或Fragment中,通过ViewModelProvider来获取ViewModel实例。可以在Activity或Fragment中创建一个ViewModel的成员变量并在onCreate方法中初始化。

    private MyViewModel myViewModel;
​
    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
​
        MyApplication myApplication = (MyApplication) getApplication();
        ViewModelProvider.Factory factory = myApplication.getViewModelFactory();
        ViewModelProvider viewModelProvider = new ViewModelProvider(this, factory);
​
        myViewModel = viewModelProvider.get(MyViewModel.class);
    }
}

这样,通过ViewModelProvider获取的ViewModel实例将会是同一个对象,可以在整个应用的生命周期内共享。

需要注意的是,ViewModel的生命周期与Activity或Fragment的生命周期相关联。当Activity或Fragment被销毁时,ViewModel的onCleared方法将会被调用,可以在这个方法中释放资源。

    @Override    protected void onCleared() {
        super.onCleared();
        // 释放资源    }
}

应用场景【主页领三十Android进阶模块笔记】

一个常见的应用场景是在多个Activity或Fragment中共享数据。例如,一个购物车的ViewModel对象可以在多个页面中共享,这样可以确保购物车的数据在不同页面中的一致性。另外,全局可调用的ViewModel对象还可以用于存储应用的全局状态,例如用户登录状态等。通过ViewModel的数据持久性,可以在应用的不同组件之间共享和保持数据的一致性。

猜你喜欢

转载自blog.csdn.net/m0_70748845/article/details/132587088