Android:如何更新A类实现的接口方法并从B类更新?

时间:2015-05-04 11:25:56

标签: android interface

我声明了一个名为

的接口
public interface listener {
    public void onError();
}

在A类中实现此接口。 我还有另一项服务B,我通过startService(new Intent(this, B.class));

打开

现在希望,当我收到B类中的任何错误时,使用该界面,可以在不使用广播的情况下通知A类?

1 个答案:

答案 0 :(得分:1)

如果您的ActivityAServiceB处于同一过程中,则可以使用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();
}

希望它有所帮助。