2013-07-22 2 views
0

Я хочу создать службу фреймворка Android и опубликовать интерфейс прослушивателя для обновления клиентов при обновлениях. Я не хочу, чтобы register_XX() & методы unregister_XX() для приложений, чтобы предоставить ссылку на прослушиватель. Что я хочу, приложения просто реализуют этот интерфейс прослушивателя и не вызывая какого-либо метода регистрации/отмены регистрации, уведомляются об изменениях.Как сделать интерфейс, который будет использоваться Клиентами: Android

Как я могу реализовать это?

ответ

2

Есть ли веские основания для регистрации/отмены регистрации? если вы вызовете интерфейс *Listener, я бы хотел зарегистрировать/отменить регистрацию (с точки зрения dev).

Я думаю, что вы можете достичь своей цели с помощью абстрактного класса 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; 
} 
+0

спасибо, что христианин за понимание :) – mohit

Смежные вопросы