Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将加载的数据保存在AsyncTaskLoader中是一个好主意吗?_Android_Loader - Fatal编程技术网

Android 将加载的数据保存在AsyncTaskLoader中是一个好主意吗?

Android 将加载的数据保存在AsyncTaskLoader中是一个好主意吗?,android,loader,Android,Loader,我正在制作一个简单的应用程序,它将加载一些数据并显示出来进行编辑 这个过程可能需要一些时间,所以我决定使用加载器(而不是我通常使用的服务)来加载所述数据 我使用的是AsyncTaskLoader,如下所示: class DataLoader extends AsyncTaskLoader<LoadResult> { } 我一直在阅读有关Loader的文章,似乎推荐的策略是按照以下思路实施的: public class DataLoader extends AsyncTaskL

我正在制作一个简单的应用程序,它将加载一些数据并显示出来进行编辑

这个过程可能需要一些时间,所以我决定使用加载器(而不是我通常使用的服务)来加载所述数据

我使用的是
AsyncTaskLoader
,如下所示:

 class DataLoader extends AsyncTaskLoader<LoadResult> {

 }
我一直在阅读有关Loader的文章,似乎推荐的策略是按照以下思路实施的:

public class DataLoader extends AsyncTaskLoader<LoadResult> {
    LoadResult _result;
    boolean _changed = false;

    public DataLoader(Context context) {
        super(context);
    }

    @Override
    protected void onStartLoading() {
        if (_changed) {
            _result = null;
            forceLoad();
        } else {
            deliverResult(_result);
        }
    }

    @Override
    public LoadResult loadInBackground() {
        //load stuff here
        _result = ...
        _changed = false;
        return _result;
    }

    public void notify_data_changed() {
       _changed = true;
    }
}
公共类DataLoader扩展了AsyncTaskLoader{
LoadResult\u result;
布尔值_changed=false;
公共数据加载器(上下文){
超级(上下文);
}
@凌驾
开始加载时受保护的void(){
如果(_更改){
_结果=空;
力载荷();
}否则{
交付结果(_结果);
}
}
@凌驾
public LoadResult loadInBackground(){
//在这里装东西
_结果=。。。
_更改=错误;
返回结果;
}
公共无效通知\数据\已更改(){
_更改=正确;
}
}
现在这一切正常,但我很担心,因为接收结果的活动还附加了一个片段,该片段在加载后将包含数据,因此如果我遵循上述策略,数据将存储在多个内存位置

另一方面,如果我不遵循上述策略,每当调用OnCreate时(例如,由于配置更改),应用程序将重新加载所有数据,即使没有对其进行更新

什么是一个好的折衷方案,这样我就不会一直重新加载数据了


有更好的方法吗?

考虑改用新的生命周期感知组件,例如
ViewModel
。这看起来很有趣,谢谢你让我注意到,我一定会尝试一下。我在项目早期,用livedata和viewmodels替换了一些东西,效果很好,非常好,但我也会使用AsyncTaskLoader来保存我的数据,我还没有找到一种用AndroidViewModel实现这一点的方法
public class DataLoader extends AsyncTaskLoader<LoadResult> {
    LoadResult _result;
    boolean _changed = false;

    public DataLoader(Context context) {
        super(context);
    }

    @Override
    protected void onStartLoading() {
        if (_changed) {
            _result = null;
            forceLoad();
        } else {
            deliverResult(_result);
        }
    }

    @Override
    public LoadResult loadInBackground() {
        //load stuff here
        _result = ...
        _changed = false;
        return _result;
    }

    public void notify_data_changed() {
       _changed = true;
    }
}