應用程序可能具有在單獨的線程上運行並在完成時回叫某個對象的部分。典型的模式可能如下所示:在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