如何查询加载管理器以查看加载程序当前是否正在运行?
最佳答案
有两种可能的情况:
第1例
如果您使用唯一的加载程序,或者您有多个加载程序,但不关心其中哪个正在运行:
getSupportLoaderManager().hasRunningLoaders()
第2例
您想知道某个特定的
Loader
是否正在运行。它似乎不受sdk支持,但是您可以很容易地自己实现它。a)只需添加标志
public class SomeLoader extends AsyncTaskLoader<String[]> {
public boolean isRunning;
@Override
protected void onStartLoading() {
isRunning = true;
super.onStartLoading();
//...
forceLoad();
}
@Override
public void deliverResult(String[] data) {
super.deliverResult(data);
isRunning = false;
}
//...
}
b)使用它(有点棘手):-)
SomeLoader loader = (SomeLoader) manager.<String[]>getLoader(ID);
Log.d(TAG, "isRunning: " + loader.isRunning);
我把它贴在这里的关键原因是-在将
Loader
强制转换为SomeLoader
之前,对泛型方法的调用非常复杂。提醒
如果您调用
getSupportLoaderManager.restartLoader
当前任务(如果它正在运行),无论您做什么都不会被终止。因此下一步将是调用onCreateLoader
,这将创建一个新的Loader
。所以这意味着你可以有2,3,4,5和更多相同的任务并行在一起(如果你不以某种方式阻止它),这可能导致电池耗尽和超过CPU/网络负载。