您确实可以使用像 NSNotification 这样的广播,但我通常会使用广播在我的应用程序的不同部分之间发送消息,例如在服务和活动之间进行通信,而不是在特定部分内进行通信。
我不明白为什么你也不能在 iOS 上做你在 Android 上做的事情。您将在 iOS 中有一个协议来定义要调用的函数,并且您可以在 Java/Android 中通过使用接口来执行相同的操作。
在 iOS 中,你会有类似的东西:
doStuffWithObject:(NSObject<SpecialStuff> *)object {}
在 Java 中,您将拥有:
doStuffWithObject(SpecialStuff object) {}
SpecialStuff 是您的协议或接口。因为你performSelectorOnBackground
在 android 中没有更多的工作。要么使用定时器,也许是一个单独的线程与处理程序结合使用,或者使用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);
}