Android: RunOnUiThread vs AsyncTask Android: RunOnUiThread vs AsyncTask multithreading multithreading

Android: RunOnUiThread vs AsyncTask


When you use new Thread you're really creating a new thread every time you execute that. AsyncTask however, uses a static pool of max 128 threads and will reuse an old thread whenever it exists. So, running AsyncTask 10 times in serial will only create one thread that runs the task 10 times instead of 10 threads.

That's one of the differences among many.


It's a convenience, essentially. The AsyncTask framework deals with managing the Thread pool and provides a simple, understandable interface. It's well-known -- by those that know how to use AsyncTask -- that UI activity can go on in onPreExecute(), onPostExecute() and onProgressUpdate(), and that all of the "heavy lifting" is done in doInBackground() where you can't touch the UI.

It makes it easy for a developer to have a simple background task that can easily post updates to the UI thread and return results when done. It's not magic, it's just a convenience.


According to this, AsyncTask is easier to use, but has some limitations like the following:

  • Core pool size and Work queue is fixed: 5 pools / 10 elements
    • it's hard coded and can't be changed
  • Thread priority is fixed to low
  • Exception handling is not as well supported as with Thread

Also there will be another difference that I haven't figured out. You can find and inspect full source code of AsyncTask since Android is opensource :-)

Have a good time with coding in Android!