如果您的ActivityA
和ServiceB
处于相同的过程中,您可以使用bindService(Intent intent, ServiceConnection conn, int flags)
而不是startService
来启动服务。而conn
将是一个内部类就像:
private ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mMyService = ((ServiceB.MyBinder) service).getService();
mMyService.setListener(new Listener() {
@Override
public void onError() {
// ...
}
});
}
@Override
public void onServiceDisconnected(ComponentName name) {
mMyService = null;
}
};
mMyService
是你ServiceB
的实例。
在ServiceB
,只是覆盖onBind
:
public IBinder onBind(Intent intent) {
return new MyBinder();
}
和ServiceB
添加下面的类:
public class MyBinder extends Binder {
public ServiceB getService() {
return ServiceB.this;
}
}
除了
,添加一个公共方法:
public void setListener(Listener listener) {
this.mListener = listener;
}
所以你可以在012中通知,如:
someMethod(){
// ...
mListener.onError();
}
PS:bindService将是这样的:
this.bindService(intent, conn, Context.BIND_AUTO_CREATE);
,不要忘记
protected void onDestroy() {
this.unbindService(conn);
super.onDestroy();
}
希望它能帮助。
嗨Euporie,绑定服务的情况下,onStartCommand()没有被调用? – Pankaj
@Pankaj绑定服务不会触发onStartCommand,它会调用onBind – Euporie