您确实可以像使用NSNotification一样使用广播,但我通常会使用广播在我的应用程序的不同部分之间传递消息,例如在服务和活动之间进行通信,而不是在特定部分内部进行通信。
我不明白为什么您不能在Android上像在iOS上那样做。在iOS中,您将拥有定义要调用哪些函数的协议,并且您可以通过使用接口在Java / Android中执行相同的操作。
在iOS中,您将拥有类似于:
doStuffWithObject:(NSObject<SpecialStuff> *)object {}
如果使用Java,你需要:
doStuffWithObject(SpecialStuff object) {}
如果SpecialStuff是您的协议或接口,因为在Android中没有performSelectorOnBackground
,所以需要更多的工作。可以使用计时器,也可以结合处理程序在单独的线程上运行,或者根据异步任务的大小使用ASyncTask。
值得一提的是,ASyncTask绝对值得探究。
当然,您也可以利用Observer和Observable。
以下是一个简单的示例,其中包含一个处理程序和一个计时器,每秒通知其监听器一个新时间(请注意,在这种情况下,处理程序是在主线程上创建的,这样您就可以像在iOS中使用performSelectorOnMainThread
一样发送消息回来):
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);
}