問題:從長時間運行的任務到活動報告進度/完成的最佳做法是什麼?當活動處於後臺/方向更改時發生進度/完成報告時該怎麼辦?長時間運行任務,回調活動或片段
現實生活中的示例: 活動使網絡調用從服務器獲取數據(這可能需要10秒以上)。 完成此網絡通話後,應通知活動並且活動應顯示網絡通話已完成。
只要應用程序保持打開狀態,這很容易實現。我的問題是,如果在應用程序在後臺完成網絡調用時該怎麼辦(活動將會錯過任何回調)。
我一直在看下面的方法可以做到這一點,但我不能決定該怎麼做:
- 服務的滋生其中執行網絡調用線程。服務綁定到活動。在網絡通話完成時,向該活動提供服務回調。如果Activity在後臺進行回調時處於後臺(因此Activity未命中回調),Activity是否應該對Service進行輪詢以獲取保存的數據? (做什麼,如果活動錯過這個廣播,因爲它是在後臺?)
- IntentService是廣播網絡時,通話結束後的數據
- 的AsyncTask,但壞就壞在活動是在後臺等
我應該如何解決這個問題?
感謝您的鏈接。我有兩個問題: 如果任務在活動在後臺完成,該怎麼辦?那麼所有的回調都會被錯過,對吧?當活動在後臺時,如何獲取從服務器檢索到的數據? 它似乎不是一個「最佳實踐」使用片段運行任務? 雖然我確實看到了這個方法的重點。 編輯:我應該將數據存儲在HeadlessFragment中,然後如果「TaskHasFinished」請求片段中的數據? –
@JonasJensen請參閱編輯回答你的問題。 – Nerd