Sla*_*ava 3

执行此操作有两种可能的情况:

第一个案例

如果您使用唯一的 Loader或者您有多个 Loader 但您不关心其中哪一个正在运行:

getSupportLoaderManager().hasRunningLoaders()
Run Code Online (Sandbox Code Playgroud)

第二种情况

您想知道某些特定功能是否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;
    }
    //...
}
Run Code Online (Sandbox Code Playgroud)

b) 并使用它(有点棘手):-)

SomeLoader loader = (SomeLoader) manager.<String[]>getLoader(ID);
Log.d(TAG, "isRunning: " + loader.isRunning);
Run Code Online (Sandbox Code Playgroud)

我将其发布在这里的关键原因 - 在将 a 转换Loader为您的SomeLoader.

提醒

无论您调用getSupportLoaderManager.restartLoader当前任务(如果正在运行),您所做的任何事情都不会被终止。因此下一步将是调用onCreateLoader它将创建一个新的Loader. 因此,这意味着您可以将 2、3、4、5 甚至更多相同的任务并行在一起(如果您不以某种方式阻止它),这可能会导致电池耗尽并超出 CPU/网络负载。