dub*_*eat 6 android asynchronous
我正在用android编写一个IOS应用程序.这是我设定尝试学习android的任务.在android我正在学习不同的异步消息传递选项.到目前为止我发现的是:
Callbacks
Broadcasts
Message Handlers
Run Code Online (Sandbox Code Playgroud)
我正在尝试确定哪种方法最适合我的目的.在我的IOS应用程序中,我有10个屏幕对象和1个协调器对象.这是我的n-1.
我的ios目前的工作方式是我的屏幕对象在我的协调器中调用一个工作方法,将自己作为委托传递.协调器执行一些异步工作,并在作业完成时调用委托上的各种方法:完成/失败,原因等.
多个屏幕对象可以请求同时完成工作.
到目前为止,我觉得回调/消息处理程序在android中的处理方式更像是1-1关系.
我倾向于使用当地的广播经理.这似乎更像是NSNotification而不是委托方法,但似乎是针对n-1关系.
广播管理器是实现n - 1异步工作的最佳方式吗?
关于回调和处理程序的1-1关系是否正确?
您确实可以使用像 NSNotification 这样的广播,但我通常会使用广播在应用程序的不同部分之间发送消息,例如在服务和活动之间进行通信,而不是在特定部分内进行通信。
我不明白为什么你不能在 Android 上完全执行 iOS 中的操作。您将在 iOS 中使用一个协议来定义要调用的函数,并且您可以通过使用接口在 Java/Android 中执行相同的操作。
在 iOS 中你会看到类似这样的东西:
doStuffWithObject:(NSObject<SpecialStuff> *)object {}
Run Code Online (Sandbox Code Playgroud)
而在 Java 中你会:
doStuffWithObject(SpecialStuff object) {}
Run Code Online (Sandbox Code Playgroud)
SpecialStuff 是您的协议或接口。因为你在 android 中没有它,performSelectorOnBackground所以需要做更多的工作。要么使用计时器,也许是一个单独的线程与处理程序结合使用,要么使用ASyncTask,具体取决于什么最适合您以及异步任务有多大。
ASyncTask 绝对值得研究。
您当然也可以使用Observer和Observable。
一个简单的示例,其中包含一个处理程序和一个计时器,每秒通知其侦听器一个新时间(请注意,在本例中,处理程序是在主线程上创建的,这样您就可以像在performSelectorOnMainThreadiOS 中使用一样发送回消息):
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());
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的监听器界面类似于Observer
public interface TimeListener {
void onTimeUpdate(long time);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
214 次 |
| 最近记录: |