应用程序可能具有在单独的线程上运行并在完成时回叫某个对象的部分。典型的模式可能如下所示:在Android上处理异步回调有什么好策略?
1)View或Fragment会调用某个模型。呼叫从某些查看或片段
model.doSomething(context, new Runnable() {
public void run() { /* run on the main thread when model finishes */ }
});
2)模型使用一个线程或的AsyncTask,做事情起源,然后调用调用线程上的回调 - 通过处理器
void doSomething(Context context, Runnable callback) {
Handler handler = new Handler();
// ...
// When finished (this is really done on some separate thread),
handler.post(callback);
}
3)回调与调用View或Fragment进行交互以通过某些控制逻辑推进
回调可能是触摸未附加到窗口的View的状态,这可能会导致应用程序不稳定。
什么是一些很好的策略来处理这种情况?
谢谢斯蒂芬,我会看看2011年IOSched应用程序。一个服务似乎有些过分,因为看起来应该有一种方法可以安全地将消息发回到视图或片段。我一直在尝试使用post(...),但是我仍然了解它是如何在窗口不可见的情况下工作的,以及一般的Android模式。 – 2012-03-09 06:45:20
这看起来好像过火了,但是当你使用这种回调模式时,你通常会做某种长时间运行的异步任务。由于调用和完成之间可能存在很大的时间差异,因此您需要开始担心时间会影响您的状态。在活动生命周期内工作时,这会变得更加麻烦,因为对活动的当前状态没有任何保证。 – 2012-03-09 12:40:49