如何更改单个ASyncTask的优先级

时间:2013-10-24 21:39:43

标签: android android-asynctask

我想知道如何强制Android中的新ASyncTask成为下一个执行的任务。想象一下,我有多个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。队列可以加载大量对象,因此重新安排单个任务或启动立即执行该任务的新任务是有意义的。

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

提前致谢。

祝你好运, 迈克尔

更新:某种程度上我的问题似乎与this post有关。这是唯一的方法吗?或者我可以使用THREAD_POOL_EXECUTOR简单地启动并行运行任务吗?我该怎么用?

0 个答案:

没有答案