简体   繁体   中英

Multiple activities binding to a service

I have a service component (common task for all my apps), which can be invoked by any of the apps. I am trying to access the service object from the all activities, I noticed that the one which created the service [startService(intent)] has the right informaion. But rest does not get the informaion needed. My Code is as below:

// Activity.java
public void onCreate(Bundle savedInstanceState) {
    ...

    Intent intent = new Intent (this.context, Service.class) ;
    this.context.startService(intent) ;
    this.context.bindService(intent, this, Context.BIND_AUTO_CREATE) ;
    ...
    String result = serviceObj.getData() ;
}

public void onServiceConnected(ComponentName name, IBinder service) {
    serviceObj = ((Service.LocalBinder)service).getService();
    timer.scheduleAtFixedRate(task, 5000, 60000 ) ;
}



// Service.java

private final IBinder mBinder = new LocalBinder();

public class LocalBinder extends Binder {
    Service getService() {
        return Service.this;
    }
}

public void onCreate() {
    super.onCreate();
    context = getApplicationContext() ;
}

public void onStart( Intent intent, int startId ) {

... some processing is done here...

}

public IBinder onBind(Intent intent) {
    return mBinder;
}

If I invoke startService(intent). it creates a new service and runs in parallel to the other service.

If I don't invoke startService(intent), serviceObj.getData() retuns null value.

Can any one enlighten me where have I gone wrong.

Any kind of pointer will be very useful..

Thanks and regards, Vinay

If I invoke startService(intent). it creates a new service and runs in parallel to the other service.

No, it does not. There will be at most one instance of your service running.

If I don't invoke startService(intent), serviceObj.getData() retuns null value.

startService() has nothing to do with it, from my reading of your code. You are attempting to use serviceObj in onCreate() . That will never work. bindService() is an asynchronous call. You cannot use serviveObj until onServiceConnected() is called. onServiceConnected() will not be called until sometime after onCreate() returns.

Also:

  • While there are cases when you might need both startService() and bindService() , they are not both needed in the normal case.
  • Do not use getApplicationContext() .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM