我想創建一個Android框架服務併發布偵聽器界面以更新客戶端的更新。我不想讓register_XX()& unregister_XX()方法爲應用程序提供偵聽器引用。我想要的是,應用程序只是簡單地實現該偵聽器接口,並且不調用任何註冊/取消註冊方法來獲取有關更改的通知。如何使界面可供客戶端使用:Android
我該如何實現?
我想創建一個Android框架服務併發布偵聽器界面以更新客戶端的更新。我不想讓register_XX()& unregister_XX()方法爲應用程序提供偵聽器引用。我想要的是,應用程序只是簡單地實現該偵聽器接口,並且不調用任何註冊/取消註冊方法來獲取有關更改的通知。如何使界面可供客戶端使用:Android
我該如何實現?
有什麼好的理由反對註冊/取消註冊?如果你調用一個接口*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;
}
謝謝基督徒的洞察力:) – mohit