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 do开发者_运维百科es 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()
andbindService()
, they are not both needed in the normal case. - Do not use
getApplicationContext()
.
精彩评论