我声明了一个名为
的接口public interface listener {
public void onError();
}
在A类中实现此接口。
我还有另一项服务B,我通过startService(new Intent(this, B.class));
现在希望,当我收到B类中的任何错误时,使用该界面,可以在不使用广播的情况下通知A类?
答案 0 :(得分:1)
如果您的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;
}
因此您可以在ActivityA
中通知ServiceB
,如:
someMethod(){
// ...
mListener.onError();
}
ps:bindService将是这样的:
this.bindService(intent, conn, Context.BIND_AUTO_CREATE);
并且不要忘记
protected void onDestroy() {
this.unbindService(conn);
super.onDestroy();
}
希望它有所帮助。