Search code examples
androidandroid-serviceandroid-binder

Use Service or Binder object to set variable inside Service


I can either set an variable int[] by using the binder object or using the service class object itself. Code is in public class MyActivity extends Activity. Which one is the way to go, both works:

    private BackgroundService.BackgroundBinder mBoundBinder; // to get methods of nested binder class inside BackgroundService
    private BackgroundService mBoundService; //service class object

    public void onServiceConnected(ComponentName className, IBinder binder) {
        mBoundService = ((BackgroundService.BackgroundBinder) binder).getService(); //google version
        mBoundBinder = ((BackgroundService.BackgroundBinder) binder);
    }

Service int[] array can be set in two ways:

1. mBoundService.setListeners = genArr(); //genArr() returns int[]
2. mBoundBinder.setListeners(genArr());

Solution

  • Google android.developer version uses following inside Service class. This shrinks the necessary nested Binder class down to one method returning the service object itself, thus its methods can directly be accessed. Nice.

      public class LocalBinder extends Binder {
        LocalService getService() {
            // Return this instance of LocalService so clients can call public methods
            return LocalService.this;
        }
      }