如何使客户端使用的界面:Android

时间:2013-07-22 18:43:08

标签: android service interface frameworks

我想创建一个Android框架服务并发布一个监听器接口来更新客户端。我不想让register_XX()& unregister_XX()方法为应用程序提供了监听器引用。我想要的是,应用程序只是实现了监听器接口而没有调用任何寄存器/取消注册方法得到变化的通知。

我该如何实现?

1 个答案:

答案 0 :(得分:2)

是否有任何理由反对注册/取消注册?如果你调用一个接口*Listener,我希望注册/取消注册它(从开发的角度来看)。

我认为你可以通过一些抽象类AbstractListener实现你的目标,它在构造函数中注册自己 - 但从架构的角度来看这并不好,并且不能解决注册问题。

e.g。

public abstract class AbstractUpdateReceiver {
  public AbstractUpdateReceiver() {
    register();
  }


  public abstract void onReceive(Update anUpdate);

  // optional, only the user should react on registering
  public abstract void onRegistered();

  // optional, only the user should react on unregistering    
  public abstract void onUnregistered();

  private void register() {
    //...do register
    onRegistered();
  }

  public void unregister() {
    //do unregister
    onUnregistered();
  }
}

如果整个注册过程应该从实现应用程序中隐藏,则不需要on(Un)Registered调用和实现。但是对于取消注册,只要您的框架没有提供unregister()clearReceivers()

之类的内容,用户仍然需要致电clearReceiver(AbstractUpdateReceiver receiver)

另一个(很多)更好的解决方案,没有任何东西,比如从实现应用程序注册/取消注册到框架中的实现,将是一个工厂,而不是一个抽象类。在这种情况下,您必须将抽象类拆分为普通类和接口,普通类提供并处理注册,而接​​口为onUpdateReceived提供方法。那么你将拥有工厂,它从框架中创建并返回类。

public UpdateReceiver createUpdateReceiver(IUpdateReceiver wrapped) {
  UpdateReceiver receiver = new UpdateReceiver(wrapped);
  receiver.register(); //or register directly into a non-static factory
  return receiver;
}
相关问题