0

我想创建一个 Android 框架服务并发布一个侦听器接口来更新客户端的更新。我不想为应用程序创建 register_XX() 和 unregister_XX() 方法来提供侦听器参考。我想要的是,应用程序只需实现该侦听器接口,而无需调用任何 register/unregister 方法即可获得更改通知。

我该如何实施?

4

1 回答 1

2

有什么好的理由反对注册/注销?如果您调用接口*Listener,我希望注册/注销它(从开发人员的角度来看)。

我认为您可以使用一些抽象类 AbstractListener 来实现您的目标,该类在构造函数中注册自身 - 但从架构的角度来看这并不好,并且无法解决注销问题。

例如

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;
}
于 2013-07-22T19:27:10.173 回答