gpt4 book ai didi

android - n-1 异步回调实现

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:17:41 25 4
gpt4 key购买 nike

我正在用 android 编写一个 IOS 应用程序。这是我设定的尝试学习 android 的任务。在 android 中,我一直在学习不同的异步消息传递选项。到目前为止我发现的是:

Callbacks
Broadcasts
Message Handlers

我正在尝试确定哪种方法最适合我的目的。在我的 IOS 应用程序中,我有 10 个屏幕对象和 1 个协调器对象。这是我的 n-1。

我的 ios 目前的工作方式是我的屏幕对象在我的协调器中调用一个工作方法,将其自身作为委托(delegate)传递。协调器执行一些异步工作,并在工作完成时调用委托(delegate)上的各种方法:完成/因原因而失败等。

多个屏幕对象可以请求同时完成工作。

到目前为止,我觉得 android 中的回调/消息处理程序方法更像是一对一的关系。

我倾向于使用本地广播管理器。这看起来更像是 NSNotification 而不是委托(delegate)方法,但似乎是为 n-1 关系而设计的。

广播管理器是实现 n - 1 异步工作的最佳方式吗?

我关于回调和处理程序的 1-1 关系的假设是否正确?

最佳答案

您确实可以使用 NSNotification 之类的广播,但我通常会使用广播在我的应用程序的不同部分之间发送消息,例如在服务和 Activity 之间进行通信,而不是在特定部分内进行通信。

我不明白为什么你不能在 Android 上做你在 iOS 中所做的事情。您将在 iOS 中有一个协议(protocol)来定义要调用的函数,并且您可以在 Java/Android 中通过使用接口(interface)来执行相同的操作。

在 iOS 中你会有这样的东西:

doStuffWithObject:(NSObject<SpecialStuff> *)object {}

在 Java 中你会:

doStuffWithObject(SpecialStuff object) {}

SpecialStuff 是您的协议(protocol)或接口(interface)。因为你在 android 中没有 performSelectorOnBackground 它需要更多的工作。要么使用计时器,也许是一个单独的线程与处理程序结合使用,要么使用 ASyncTask取决于什么最适合您以及异步任务有多大。

ASyncTask 绝对值得研究。


您当然也可以使用 ObserverObservable .

一个带有处理程序和计时器的简单示例,它每秒通知其监听器一个新的时间(请注意,在这种情况下,处理程序是在主线程上创建的,这样您就可以像使用 一样发送回消息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());
}
}
}
}

我的监听器接口(interface)类似于Observer

public interface TimeListener {
void onTimeUpdate(long time);
}

关于android - n-1 异步回调实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13526478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com