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