確かにNSNotificationのようなブロードキャストを使用できますが、私は通常、特定の部分ではなく、サービスとアクティビティの間の通信など、アプリのさまざまな部分の間でメッセージを送信するためにブロードキャストを使用します。
なぜあなたがAndroidのiOSであなたがしていることを正確に行うことができないのか分かりません。iOSには、呼び出す関数を定義するプロトコルがあり、Java / Androidでも、インターフェイスを使用して同じことを行うことができます。
iOSでは、次のようになります。
doStuffWithObject:(NSObject<SpecialStuff> *)object {}
Javaを使用している間は、次のようになります。
doStuffWithObject(SpecialStuff object) {}
SpecialStuffがプロトコルまたはインターフェースです。あなたはperformSelectorOnBackground
アンドロイドにもう少し仕事がないので。タイマーを使用するか、ハンドラーと組み合わせて別のスレッドを使用するか、非同期タスクの最適な機能と大きさに応じてASyncTaskを使用します。
ASyncTaskは間違いなく調べる価値があります。
もちろん、 ObserverとObservableを利用することもできます。
ハンドラーと、毎秒新しい時刻をリスナーに通知するタイマーを使用した簡単な例(この場合、ハンドラーはメインスレッドで作成されるためperformSelectorOnMainThread
、iOSでの使用と同様にメッセージを送り返すことができます)。
class SomeExample {
private final ArrayList<TimeListener> timeListeners;
private final Handler handler = new Handler();
private final TimeUpdateRunnable timeUpdateRunnable = new TimeUpdateRunnable();
public SomeExampleView {
timeListeners = new ArrayList<TimeListener>();
updateTimer = new Timer("General Update Timer");
TimeUpdateTask timeUpdateTask = new TimeUpdateTask();
updateTimer.scheduleAtFixedRate(timeUpdateTask, (60 * 1000) - (System.currentTimeMillis() % (60 * 1000)), 60 * 1000);
}
public void addTimeListener(TimeListener timeListener) {
timeListeners.add(timeListener);
}
public boolean removeTimeListener(TimeListener timeListener) {
return timeListeners.remove(timeListener);
}
class TimeUpdateTask extends TimerTask {
public void run() {
handler.post(timeUpdateRunnable);
}
}
private class TimeUpdateRunnable implements Runnable {
public void run() {
for (TimeListener timeListener : timeListeners) {
timeListener.onTimeUpdate(System.currentTimeMillis());
}
}
}
}
そして、私のリスナーインターフェースはObserver
public interface TimeListener {
void onTimeUpdate(long time);
}