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;
}
}