2011-03-20 139 views
1

我的應用程序下載文件(5-12MB一塊),並從外部存儲訪問它們。由於下載需要一兩分鐘,當一個人不在WiFi上時,我希望能夠在用戶到達他們需要的活動之前開始下載,以便他們不必等待。asynctask活動之間共享

AsyncTask似乎是最好的方法,但後來我意識到未來的活動(以我的理解)將無法檢查AsyncTask本身的進度,他們可以做的最好的方法是繼續檢查查看文件是否可讀......但如果任務仍在運行或丟失網絡連接並需要重試,該怎麼辦?

如果它很快就會完成,那麼不分青紅皁白地重新創建AsyncTask並再次下載文件似乎是一種浪費。

有沒有辦法從未來的活動中訪問AsyncTask(特別是其狀態),還是有更好的範例我應該看?

回答

1

你可以創建一個服務,在後臺下載你需要的東西。 完成後,您可以通過意圖告訴您的應用程序內容已準備就緒,並通過stopSelf()停止服務。因此,即使在主屏幕上,您的下載也一直在繼續。 因此,請確保您創建通知,告訴用戶並給他取消的機會。 :)

編輯:當然,你可以使用服務內的任務。由於服務不會產生自己的線程,無論如何這可能是一個好主意。

+1

對於'Service'中的後臺線程,考慮'IntentService'。 – CommonsWare 2011-03-20 21:24:51

+0

我正在查看IntentService,但我沒有看到檢查服務狀態的方法。我可以讓它發送通知,但是如何讓UI線程檢查它是否仍在運行? – Turnsole 2011-03-20 22:25:01