5

I was wondering how I could force a new ASyncTask in Android to be the next task executed. Imagine I have multiple ASyncTask's to load content from the internet, e.g. in my case I pre-load all objects of DataModelA, DataModelB and DataModelC. All the data is loaded to a central application model. I guess my current queue would look like this (but I do not manage it as a queue, yet):

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. ...

I start my tasks like this:

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

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

The task class looks like this:

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
        ...
    }
}

What I would like to achieve:

Now within my GUI, I like to click on a button and force to load a single part of a model first, because I need to display it right now. Usually this is a task which is already in the queue, but in my case I could also just start a new task, e.g. to load DataModelC-Object2 first before all others are loaded. The queue could load a large number of objects, so that it makes sense to re-schedule a single task or start a new task which does the job immediately.

Any idea how I can handle that? If you would need to see more code snippets, please let me know.

Thanks in advance.

Best regards, Michael

UPDATE: somehow my question seems to be related to this post. Is that the only way? Or could I simply start a parallel running task using the THREAD_POOL_EXECUTOR? How would I use that?

Community
  • 1
  • 1
Michael
  • 3,982
  • 4
  • 30
  • 46

0 Answers0