2011-01-17 3 views
0

Ich habe Threads, die eingehenden HTTP-Nachrichten zuhören, ich möchte andere Entwickler, die meinen Code verwenden, in der Lage sein, die Nachrichten zu verwenden, die ich zu jeder Zeit erhalten habe. Ich sah in einigen mobilen Betriebssystemen können Sie Klasse implementieren und OnRecive-Funktion überschreiben, um die Nachrichten zu empfangen.Behandlung empfangener Nachrichten im laufenden Thread

ist dies die richtige Architektur in diesem Fall? Wenn ja, wie könnte ich umgesetzt werden und wenn es nicht der beste Weg ist, es zu tun.

Antwort

0

Werfen Sie einen Blick auf die Observer Pattern.

Sie können eine Schnittstelle MessageListener genannt haben:

public interface MessageListener{ 
    void onMessage(String message); 
} 

Benutzer Ihrer Bibliothek ihre eigenen MessageListeners schaffen und die onMessage Methode implementieren, das, was, wenn es empfangen wird eine Meldung erfolgen soll definiert. Sie werden diesen MessageListener auch mit Ihren "Threads" setzen (oder registrieren), bevor sie gestartet werden.

Sobald der Thread eine Nachricht erhält, benachrichtigt er den/die bei ihm registrierten Listener, indem er die Methode onMessage aufruft.

+0

ich entwickle für BB und ich merke, dass Observer nicht in der API enthalten ist, könnten Sie mehr erklären, wie sie MessageListener mit meinem Thread registrieren konnten. Danke – Jimmy

+0

@Fevos In Ihrer Thread-Klasse sollten Sie eine Methode namens 'addListener (MessageListener l)' bereitstellen. Sie rufen dann diese Methode mit ihrer eigenen Implementierung von MessageListener auf, bevor der Thread gestartet wird. – dogbane

1

Sie können eine Schnittstelle haben, die ein anderes develoepr implementieren und mit Ihrem Code registrieren kann, um benachrichtigt zu werden, wenn eine neue Nachricht usw. angekommen ist. Es gibt eine Reihe von Möglichkeiten, dies zu erreichen.

Sie könnten die integrierte Observable-Klasse verwenden. oder du könntest so etwas machen.

public interface Listener<T> { 
    public void onEvent(T t); 
} 

public class Listenable<T> { 
    private final List<Listener<T>> list = new CopyOnWriteArrayList<Listener<T>>(); 

    public void register(Listener<T> listener) { 
     if (!list.contains(listener)) list.add(listener); 
    } 

    public void unregister(Listener<T> listener) { 
     list.remove(listener); 
    } 

    public void onEvent(T t) { 
     for (Listener<T> tListener : list) 
      tListener.onEvent(t); 
    } 
} 

Der Aufrufer könnte die Listener-Schnittstelle implementieren oder ein Objekt bereitstellen, das dies tut. Es registriert dies dann mit dem Listenable. Das Listenable kann alle registrierten Listener benachrichtigen.

+0

was ich verstehe ist, um eine Schnittstelle zu machen, und der Benutzer könnte die Sache, dass ich mich fragen, wie der Benutzer verknüpfen (registrieren) die implementierte Methode mit meinem Thread. Danke – Jimmy

Verwandte Themen