For multiple query you can use ThreadPoolExecutor
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
new callApi().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, location);
} else {
new callApi().execute(location);
}
Thread Pool Template
AsyncTask uses a thread pool template to run stuff from doInBackground ()
A thread pool template where the number of threads is created to perform a number of tasks. This is basically a container in which several threads enter the queue to perform various tasks.
Example:
public class MultipleAsyncTask extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
runMultipleAsyncTask();
}
private void runMultipleAsyncTask()
{
FirstAsyncTask asyncTask = new FirstAsyncTask();
if(AppUtil.isCurrentVersionHoneycombAndAbove())
{
asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
else
{
asyncTask.execute();
}
SecondAsyncTask asyncTask2 = new SecondAsyncTask();
if(AppUtil.isCurrentVersionHoneycombAndAbove())
{
asyncTask2.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
else
{
asyncTask2.execute();
}
}
private class FirstAsyncTask extends AsyncTask<Void, Void, Void>
{
@Override
protected void onPreExecute()
{
Log.i("AsyncTask" ,"FirstOnPreExecute()");
}
@Override
protected Void doInBackground(Void... params)
{
for(int index = 0; index < 50; index++)
{
Log.i("AsyncTask" ,"FirstAsyncTask");
try
{
Thread.sleep(100);
}
catch (InterruptedException exception)
{
exception.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(Void result)
{
Log.d("AsyncTask" ,"FirstonPostExecute()");
}
}
private class SecondAsyncTask extends AsyncTask<Void, Void, Void>
{
@Override
protected void onPreExecute()
{
Log.i("AsyncTask" ,"SecondOnPreExecute()");
}
@Override
protected Void doInBackground(Void... params)
{
for(int index = 0; index < 50; index++)
{
Log.d("AsyncTask" ,"SecondAsyncTask");
try
{
Thread.sleep(100);
}
catch (InterruptedException exception)
{
exception.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(Void result)
{
Log.d("AsyncTask" ,"SecondOnPostExecute()");
}
}
}
Output:
FirstOnPreExecute()
SecondOnPreExecute()
FirstAsyncTask
SecondAsyncTask
FirstAsyncTask
SecondAsyncTask
FirstAsyncTask
SecondAsyncTask
FirstAsyncTask
SecondAsyncTask
FirstAsyncTask
SecondAsyncTask
FirstAsyncTask
SecondAsyncTask
FirstAsyncTask
SecondAsyncTask
FirstAsyncTask
SecondAsyncTask
FirstAsyncTask
SecondAsyncTask
FirstAsyncTask
SecondAsyncTask
FirstonPostExecute()
SecondOnPostExecute()
The same asyncTask for various functions, such as api requests:
boolean flag;
@Override
protected String doInBackground (String... params) {
flag= params[0].endsWith("/repos");
}
Now in your onPostExecute:
if(flag){
} else {
}
source
share