我想知道下載文件,異步任務或服務哪個更好?異步任務與服務下載數據
我的應用程序有八個按鈕,其中一個啓動一個direfferent下載(下載有〜10MB)。當用戶點擊一個或多個按鈕來下載數據時最好使用異步任務或服務?
謝謝!
我想知道下載文件,異步任務或服務哪個更好?異步任務與服務下載數據
我的應用程序有八個按鈕,其中一個啓動一個direfferent下載(下載有〜10MB)。當用戶點擊一個或多個按鈕來下載數據時最好使用異步任務或服務?
謝謝!
無論如何,您應該使用AsyncTask
,因爲即使服務運行在主(GUI)線程中也不應該進行聯網。是否在服務或活動中運行AsyncTask
取決於您是否希望下載在後臺繼續。
的AsyncTask - AsyncTask
操作線程和/或處理程序,如果你能做到這一點與Looper
和東西更好何必呢? AsyncTask被設計成圍繞線程和處理程序的助手類,它應該用於短操作(最多幾秒鐘)。..如何在生產模式下告訴您是否不會花費很長時間?可能是網絡不好,網絡速度慢,網絡堵塞,手機重新啓動 - 所有這些都可能會使你的下載破壞或未完成..我是應用程序的用戶,當我浪費捆綁在任何東西上時,我都生氣..
如果你問我,用
服務 - Service
做成不管什麼應用程序/屏幕是可見的運行,並使如果與UI溝通,只要它是可用的,如果不繼續下載並保存, AsyncTask
不構成通用線程框架。總是使用線程,它的酷,我們都喜歡它。
以上所有答案都有好處。但生命週期問題是您應該考慮的最重要的事情。例如可以說你使用asyncTask
。因此用戶開始下載並突然他/她旋轉屏幕,並且因爲您將asyncTask
生命週期連接到activity
,另一個asyncTask
操作將被啓動並導致10mb的強制下載。所以考慮到這個問題,你應該一起使用service
和asyncTask
來維護生命週期問題和UI線程聯網問題。
更新:意向性服務是一個更好的解決方案,因爲它在自己的線程接收請求和下線時不會有什麼
感謝@StenSoft,所以如果應用程序切換到後臺或用戶切換到另一個活動,異步任務停止? – Caaarlos 2015-02-09 01:55:58
不,但沒有服務,整個應用程序可以在任何時候被系統殺死。 – StenSoft 2015-02-09 01:57:01
嗯知道我明白我必須在哪個時刻使用!所以我會使用AsyncTask。 你解決了我的疑惑,謝謝StenSoft! – Caaarlos 2015-02-09 02:05:16