我想知道如何强制Android中的新ASyncTask
成为下一个执行的任务。想象一下,我有多个ASyncTask
来加载来自互联网的内容,例如在我的情况下,我预加载DataModelA
,DataModelB
和DataModelC
的所有对象。所有数据都加载到中央应用程序模型。我想我现在的队列看起来像这样(但我不把它作为队列管理):
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
。队列可以加载大量对象,因此重新安排单个任务或启动立即执行该任务的新任务是有意义的。
知道如何处理吗?如果您需要查看更多代码段,请告诉我们。
提前致谢。
祝你好运, 迈克尔
更新:某种程度上我的问题似乎与this post有关。这是唯一的方法吗?或者我可以使用THREAD_POOL_EXECUTOR
简单地启动并行运行任务吗?我该怎么用?