受信HTTPメッセージをリッスンするスレッドがあります。自分のコードを使用する他の開発者が、いつでも受信したメッセージを使用できるようにします。モバイルOSによっては、クラスを実装してonRecive関数をオーバーライドしてメッセージを受け取ることができます。実行中のスレッドで受信したメッセージを処理する
これは正しいアーキテクチャですか?もしそうなら、私はどのように実装することができますし、それを行うための最良の方法は何ですか。
受信HTTPメッセージをリッスンするスレッドがあります。自分のコードを使用する他の開発者が、いつでも受信したメッセージを使用できるようにします。モバイルOSによっては、クラスを実装してonRecive関数をオーバーライドしてメッセージを受け取ることができます。実行中のスレッドで受信したメッセージを処理する
これは正しいアーキテクチャですか?もしそうなら、私はどのように実装することができますし、それを行うための最良の方法は何ですか。
Observer Patternをご覧ください。あなたはMessageListener
と呼ばれるインターフェース持つことができます
:あなたのライブラリーの
public interface MessageListener{
void onMessage(String message);
}
ユーザーが自分のMessageListenersを作成し、メッセージを受信したときにどうすべきかを定義onMessage
メソッドを実装します。また、このMessageListenerを開始する前に、このMessageListenerを「スレッド」で設定(または登録)します。
スレッドがメッセージを取得するたびに、onMessage
メソッドを呼び出して、スレッドに登録されているリスナーに通知します。
develoeprが実装し、新しいメッセージなどが到着したときに通知されるコードに登録できるインターフェイスを持つことができます。これが達成される方法はいくつでもあります。
組み込みのObservableクラスを使用できます。あなたはこのようなことをすることができます。
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);
}
}
呼び出し側は、Listenerインターフェイスを実装したり、オブジェクトを提供することができます。これをListenableに登録します。 listenableは、登録されているすべてのリスナーに通知できます。
私が理解しているのは、インターフェイスを作成することです。ユーザは、実装されたメソッドを自分のスレッドにどのようにリンクさせるかについて、私が疑問に思っていることを実装できます。ありがとうございます – Jimmy
私はBBのために開発し、ObserverがAPIに含まれていないことに気付きました。あなたが私のスレッドでMessageListenerを登録する方法をもっと説明できますか?ありがとう – Jimmy
@Fevosスレッドクラスでは、 'addListener(MessageListener l)'というメソッドを提供する必要があります。スレッドを開始する前に、独自のMessageListener実装でこのメソッドを呼び出します。 – dogbane