I am currently writing a android program which needs an IntentService
. When I put the code in the onHandleIntent
function, the code does not run, but it doesn't give errors in the MainActivity
. But when I copy my code into the onStartCommand
, it runs perfectly.
The problem is that I wanna know what are the differences between onHandleIntent
and onStartCommand
. Thanks.
CODE:
In onHandleIntent
:
System.out.println("SERVICE STARTED! ! !");
//System.out.println(intent.getBooleanExtra("once", Boolean.FALSE));
if (intent.getBooleanExtra("once", Boolean.FALSE)) {
Check();
}
mHandler.postDelayed(mRunnable, 3000);
As from the docs:
The IntentService
does the following:
- Creates a default worker thread that executes all intents delivered to
onStartCommand()
separate from your application's main thread.- Creates a work queue that passes one intent at a time to your
onHandleIntent()
implementation, so you never have to worry about multi-threading.- Stops the service after all start requests have been handled, so you never have to call
stopSelf()
.- Provides default implementation of
onBind()
that returnsnull
.- Provides a default implementation of
onStartCommand()
that sends the intent to the work queue and then to youronHandleIntent()
implementation.
And also:
All this adds up to the fact that all you need to do is implement
onHandleIntent()
to do the work provided by the client. (Though, you also need to provide a small constructor for the service.)
So an IntentService
is a "Custom" Service
with those special properties. So there's no need to override the onStartCommand()
, actually, you shouldn't do it unless you're using the regular Service
class.
Some example of IntentService
usage:
Activity.java
Intent it = new Intent(getApplicationContext(), YourIntentService.class);
it.putExtra("Key", "Value");
startService(it);
YourIntentService.java
public YourIntentService() {
super("YourIntentService");
}
@Override
protected void onHandleIntent(Intent intent) {
if (intent != null) {
String str = intent.getStringExtra("key");
// Do whatever you need to do here.
}
//...
}
You can also check this tutorial or this one for more info about Service
and IntentService
.
Also, check the docs.