AsyncTasks are executed sequentially on a single background thread ( from API 11 ).
A small test:
private static class AsyncTaskX extends AsyncTask<Void, Void, Void>{ @Override protected Void doInBackground(Void... params) { for (int i = 0; i < 10; i++){ Log.i("test order", "ping X "+ i); try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } } return null; } } private static class AsyncTaskY extends AsyncTask<Void, Void, Void>{ @Override protected Void doInBackground(Void... params) { for (int i = 0; i < 10; i++){ Log.i("order", "ping Y" + i); try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } } return null; } }
Logs:
test order: ping X 0 test order: ping X 1 test order: ping X 2 test order: ping X 3 test order: ping X 4 test order: ping X 5 test order: ping X 6 test order: ping X 7 test order: ping X 8 test order: ping X 9 order: ping Y0 order: ping Y1 order: ping Y2 order: ping Y3 order: ping Y4 order: ping Y5 order: ping Y6 order: ping Y7 order: ping Y8 order: ping Y9
So long working a worker can block others.
task.execute (). get () will return before onPostExecute, and you will block the UI thread.
Check out general information about processes and threads and some errors .
Runtime also matters, since AsyncTask should only be used for tasks / operations that take quite a few seconds.
source share