Reputation: 2069
Is there any difference in running background threads from an Activity
and from a Service
that is started by the Activity
? Added: The background threads do not interact with the UI.
I currently have some background threads that are launched from the Activity
. Most are via AsyncTask
and one is through my own ExecutorService
. I would like to know if there is a significant benefit to refactoring the code to move these to a Service
or IntentService
.
Upvotes: 3
Views: 597
Reputation: 7672
You seem to be confused about the definition of Activities and Services. To make it clear:
Both of these, however, run on the "main thread" of the application. By itself, an Activity or a Service (or Broadcast Receiver, Content provider, etc...) is not a thread. Look at the documentation, and you will see that the Activity and Service classes do not, in fact, form a thread. Instead, they are hooks that will run inside the Android framework, and the framework will at the appropriate time call them on the "main" thread of the app.
You can create separate threads for the app, or use an AsyncTask
to do work and publish it to the UI thread easily (something not so easily achieved with a Service).
Upvotes: 3
Reputation: 368
Threads that are bound to Activities have the same lifecycle. So if you restart/kill the Activity, the thread will also be restarted/killed. This is a problem if you don't manage the lifecycle of an Activity. A service is good in this case. You can have the activity destroyed and still a worker thread running in the background (in the service). But be advised that, if the Android system need resources (memory for example) it will kill the services first (and then restart them according to their Sticky flag). In my opinion, there are no actual benefit in changing threads from the Activity to a Service, since you control the workflow of your activity. If the threads are heavy (and brake the UI for moments) consider putting them in a service on a separate process (in AndroidManifest put the process name of the service).
In Android documentation:
Caution: Another problem you might encounter when using a worker thread is unexpected restarts in your activity due to a runtime configuration change (such as when the user changes the screen orientation), which may destroy your worker thread. To see how you can persist your task during one of these restarts and how to properly cancel the task when the activity is destroyed, see the source code for the Shelves sample application.
Upvotes: 1