Service | Thread | IntentService | AsyncTask | |
---|---|---|---|---|
When to use ? | Task with no UI, but shouldn’t be too long. Use threads within service for long tasks. | – Long task in general.
– For tasks in parallel use Multiple threads (traditional mechanisms) |
– Long task usually with no communication to main thread. (Update)– If communication is required, can use main thread handler or broadcast intents[3] – When callbacks are needed (Intent triggered tasks). |
– Long task having to communicate with main thread.
– For tasks in parallel use multiple instances OR Executor [1] |
Trigger | Call to method onStartService() |
Thread start() method | Intent | Call to method execute() |
Triggered From (thread) | Any thread | Any Thread | Main Thread (Intent is received on main thread and then worker thread is spawed) | Main Thread |
Runs On (thread) | Main Thread | Its own thread | Separate worker thread | Worker thread. However, Main thread methods may be invoked in between to publish progress. |
Limitations / Drawbacks |
May block main thread | – Manual thread management
– Code may become difficult to read |
– Cannot run tasks in parallel.
– Multiple intents are queued on the same worker thread. |
– one instance can only be executed once (hence cannot run in a loop) [2]
– Must be created and executed from the Main thread |