5

我想知道下載文件,異步任務或服務哪個更好?異步任務與服務下載數據

我的應用程序有八個按鈕,其中一個啓動一個direfferent下載(下載有〜10MB)。當用戶點擊一個或多個按鈕來下載數據時最好使用異步任務或服務?

謝謝!

回答

5

無論如何,您應該使用AsyncTask,因爲即使服務運行在主(GUI)線程中也不應該進行聯網。是否在服務或活動中運行AsyncTask取決於您是否希望下載在後臺繼續。

+0

感謝@StenSoft,所以如果應用程序切換到後臺或用戶切換到另一個活動,異步任務停止? – Caaarlos 2015-02-09 01:55:58

+1

不,但沒有服務,整個應用程序可以在任何時候被系統殺死。 – StenSoft 2015-02-09 01:57:01

+0

嗯知道我明白我必須在哪個時刻使用!所以我會使用AsyncTask。 你解決了我的疑惑,謝謝StenSoft! – Caaarlos 2015-02-09 02:05:16

1

的AsyncTask - AsyncTask操作線程和/或處理程序,如果你能做到這一點與Looper和東西更好何必呢? AsyncTask被設計成圍繞線程和處理程序的助手類,它應該用於短操作(最多幾秒鐘)。..如何在生產模式下告訴您是否不會花費很長時間?可能是網絡不好,網絡速度慢,網絡堵塞,手機重新啓動 - 所有這些都可能會使你的下載破壞或未完成..我是應用程序的用戶,當我浪費捆綁在任何東西上時,我都生氣..

如果你問我,用

服務 - Service做成不管什麼應用程序/屏幕是可見的運行,並使如果與UI溝通,只要它是可用的,如果不繼續下載並保存, AsyncTask不構成通用線程框架。總是使用線程,它的酷,我們都喜歡它。

1

以上所有答案都有好處。但生命週期問題是您應該考慮的最重要的事情。例如可以說你使用asyncTask。因此用戶開始下載並突然他/她旋轉屏幕,並且因爲您將asyncTask生命週期連接到activity,另一個asyncTask操作將被啓動並導致10mb的強制下載。所以考慮到這個問題,你應該一起使用serviceasyncTask來維護生命週期問題和UI線程聯網問題。

更新:意向性服務是一個更好的解決方案,因爲它在自己的線程接收請求和下線時不會有什麼