如何查询加载管理器以查看加载程序当前是否正在运行?

最佳答案

有两种可能的情况:
第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/网络负载。

08-17 18:26