Local services vs. Remote Services Local services are used by components in the same process (or vm?)

Download 10.85 Kb.
Size10.85 Kb.
Local Services

Local services vs. Remote Services

  • Local services are used by components in the same process (or VM?)

  • Remote services are accessible to other processes.

    • The interface for remote services is more complicated than for local services

  • Examples

    • Audio player

      • The GUI is an activity

      • The player is a local service that keeps on running although the GUI is no longer running (e.g., the GUI is not in focus or was “closed”)

    • Map tracker: something that marks your path on a map

      • The gui is an activity

      • Recording the locations is in a local service, so that the path is kept up to date even though the activity is no longer running

    • Fancy location provider: something that is better than the GPS based location provider built into the android

      • This should be a remote service so that different applications can use it. If it was a local service, then each app would have to have its own copy

Local service (video)

  • There are two parts, the service and the activity that uses the service

  • Start a new project called FunWithLocalServices as usual

  • Add a new class MyService, but derive it from android.app.Service




public void onCreate() {






public void onDestroy() {




In manifest, either



in application tab, in Application Nodes, add Service. Set name = MyService


In onCreate add:

Log.e("FunWithLocalServices","Starting Service");

startService(new Intent(this, MyService.class));

add member variable:

int myCnt = 0;

MyService (video)


int cnt = 0; // this could be anything, a function whatever

We want to provide access to MyServices member variables and functions. A binder will do this:

private final Binder binder = new LocalBinder();

public class LocalBinder extends Binder {

MyService getService() {


return MyService.this;



Make onBind() return binder



Add variable:

private MyService myService = null;


private ServiceConnection connectionToMyService = new ServiceConnection() {


public void onServiceConnected(ComponentName className, IBinder rawBinder) {

myService = ((MyService.LocalBinder)rawBinder).getService();



public void onServiceDisconnected(ComponentName name) {

myService = null;


In onCreate add:

bindService(new Intent(this, MyService.class), connectionToMyService, BIND_AUTO_CREATE);

At the end of onDestroy add:


FunWithLocalServices continued

The myService variable provides access to MyServices. Let’s use it

Add button and button listener:

Button button = (Button)findViewById(R.id.Button01);

button.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

Log.e("MyLocalSERVICE","val="+myService.cnt+" mycnt= "+myCnt);


myCnt++; });

Note: we cannot get access to myService in onCreate (which is where Bind is called). So we use the button press.

Run the program and press button a couple of times. Now close to program and restart. Press button. Notice that the service did not close and still maintains the count.

Share with your friends:

The database is protected by copyright ©ininet.org 2019
send message

    Main page