Android uses
services to perform long running jobs, or background tasks (think to a network interaction or an mp3 player). How can we start a service?
We should begin extending the
android.app.Service class:
public class TestService extends Service {
@Override
public IBinder
onBind(Intent arg0) {
return null;
}
public void onCreate () {
Log.i("onCreate", "onCreate");
}
@Override
public int
onStartCommand(Intent intent, int flags, int startId) {
Log.i("onStartCommand", "onStartCommand");
Toast.makeText(this, "Hi, this is a service!",
Toast.LENGTH_LONG).show();
return START_STICKY;
}
}
The two most important methods, for the purposes
of this post, are onCreate and onStartCommand. Android invokes the first, when
the service is created, and the second one, when it is executed. The
Toast.makeText(…) command is a nice way to give notifications to the users.
Please note that the onStartCommand
callback exists only in the versions 2.0 and later. In older versions you should
override the onStart method (now deprecated).
Once you have you service’s skeleton, you
can register with the operating system, adding a line to the manifest:
<service android:name="TestService"
android:enabled="true" >service>
Or in a easier way, using the Eclipse interface:
At the end is time to start our service,
using two instructions:
Intent intent = new Intent(this, TestService.class);
startService(intent);
We create an android.content.Intent instance, and then we use
it in the startService method. The Intent, ask you for a context (your calling
Activity is fine), and the implementation class. He will take care of the
instantiation. The startService will call your onStartCommand procedure, passing
it also the intent instance. A nice place to do it could be in the onClick
method:
public void onClick(View v) {
switch (v.getId()) {
case R.id.buttonStart:
Intent
intent = new Intent(this, TestService.class);
startService(intent);
break;
}
}