5

我想知道如何ASyncTask在 Android 中强制执行下一个任务。想象一下,我有多个's 来从互联网加载内容,例如,在我的情况下,ASyncTask我预加载了和的所有对象。所有数据都加载到中央应用程序模型中。我想我当前的队列看起来像这样(但我还没有将它作为一个队列来管理):DataModelADataModelBDataModelC

1. DataModelA-Object1
2. DataModelA-Object2
3. DataModelA-Object3
4. DataModelB-Object1
5. DataModelB-Object2
6. DataModelB-Object3
7. DataModelB-Object4
8. DataModelC-Object1
9. DataModelC-Object2
10. ...

我这样开始我的任务:

DataModelALoaderTask task = new DataModelALoaderTask();
task.execute("http://my-rest-api.com/datamodel/a"); 

// and the same for the other tasks
...

任务类如下所示:

private class DataModelALoaderTask extends AsyncTask<String, Void, List<DataModelA>> {  
    @Override
    protected List<DataModelA> doInBackground(String... params) {
        String data = params[0];
        return DataModelAContentProvider.loadContentFromUrl(data);
    }

    @Override
    protected void onPostExecute(List<DataModelA> models) {
        // finally add the loaded content to the central application data model
        ...
    }
}

我想达到的目标:

现在在我的 GUI 中,我喜欢单击一个按钮并首先强制加载模型的单个部分,因为我现在需要显示它。通常这是一个已经在队列中的任务,但在我的情况下,我也可以开始一个新任务,例如在加载DataModelC-Object2所有其他任务之前先加载。队列可以加载大量对象,因此重新调度单个任务或启动立即执行该作业的新任务是有意义的。

知道我该如何处理吗?如果您需要查看更多代码片段,请告诉我。

提前致谢。

最好的问候,迈克尔

更新:不知何故,我的问题似乎与这篇文章有关。这是唯一的方法吗?或者我可以简单地使用THREAD_POOL_EXECUTOR? 我将如何使用它?

4

0 回答 0