Android:在应用生命周期中持久存储数据

问题描述 投票:0回答:2

我正在使用一些后台任务(AsyncTasks)的Android应用程序,并且我想使用有关跨应用程序生命周期和任务回调的数据持久性的最佳实践。

到目前为止,我对此有多种做法:

1)我在使用以下形式使用AsyncTasks的类中有一些静态字段:

private static String str1;
private static String str2;
private static int int1;
...//=>no more than 6 static fields

2)我使用具有以下形式的许多getter / setter的sinleton App实例:

package xxx.xxx.xxx

import xxx.xxx.xxx
...

public class AppSettings {

    private static AppSettings singleton;
    private String _field1;
    ...//=>many fields

    public void setField1(String field1) { _field1 = field1; }
    public String getField1() { return _field1; }
    ...//=>many getters/setters

    private AppSettings() {}

    public AppSettings getInstance(){
        if (instance== null) {
            synchronized(AppSettings.class) {
                if (instance == null)
                    instance = new AppSettings();
            }
        }
        return instance;
    }
}

我绝对知道滥用静态字段根本不好,所以我决定全部替换掉​​,但是我不确定我的第二种方法(在具有多个getter / setter的单例中拥有一个应用程序实例)是否是被认为是一个不错的选择,如果不这样做,我想知道更好的选择。

非常感谢。

android android-asynctask singleton persistence instance
2个回答
1
投票

您的方法在现代android开发中不算是“最佳实践”。

处理配置更改的推荐方法是使用新的architecture componentViewModel

它具有保留配置更改发生时触发的onDestroy的属性。

enter image description here

[基本上,您需要将此AppSettings代码移动到ViewModel。


1
投票

嗯,您在谈论persisting data across app lifecycle,在我看来,这听起来像是您在寻找ViewModel

ViewModel类旨在存储和管理与UI相关的数据,有生命周期意识的方式。 ViewModel类允许数据存活配置更改,例如屏幕旋转。

以及:

ViewModel的目的是获取并保留信息活动或片段所必需的。活动或片段应该能够观察ViewModel中的更改。

ViewModels构成MVVM设计模式的一部分,在线提供了很多示例。

有关更多信息,请看at the documentation

© www.soinside.com 2019 - 2024. All rights reserved.