2013-01-15 99 views
1

我想知道是否有方法可以在不使用異步任務的情況下將文件下載到android設備。沒有asyncTask下載文件

我的問題是我想在我的應用程序中使用異步任務,我需要調用一個下載函數INSIDE這個asyncTask,但是android的文檔說只能從UI線程創建一個asyncTask。

我試圖通過使用extends thread而不是extends asyncTask創建一個線程,但android仍然給「網絡上的UI線程異常」。

我需要的是這樣的一個函數:返回下載字符串字符串downloadFile(字符串URL){...}(我下載一個XML文件,沒有什麼花哨)

+2

請發佈您的AsyncTask代碼。它仍然是做這種事情的最簡單的方法,所以我們讓它工作。 –

+1

最好的猜測是你的AsyncTask實現不正確... – etienne

+0

不清楚。如果你在使用uithread,你可以執行asynctask – njzk2

回答

2

,我需要調用下載功能這裏面的AsyncTask

如果「這裏面的AsyncTask」的真正含義「從AsyncTaskdoInBackground()方法」,那麼「下載功能「(不管是什麼)不需要是異步的。

但是Android還是說你不是在做「網絡上的UI線程異常」

然後,網絡I/O從AsyncTaskdoInBackground()或任何背景的方式(例如,從一個普通您分叉的Thread)。

0

可以服務下載Android中的文件。

服務是一種應用程序組件,它表示應用程序希望在不與用戶交互的情況下執行長時間運行的操作,或爲其他應用程序提供功能以使用。每個服務類必須在其包的AndroidManifest.xml中有相應的聲明。服務可以使用Context.startService()和Context.bindService()來啓動。

請注意,與其他應用程序對象一樣,服務在其宿主進程的主線程中運行。這意味着,如果你的服務要做任何CPU密集型(如MP3播放)或阻塞(如網絡)操作,它應該產生自己的線程來完成這項工作。有關這方面的更多信息可以在「進程和線程」中找到。 IntentService類可作爲Service的標準實現提供,它具有自己的線程,用於調度要完成的工作。

http://www.java2s.com/Code/Android/Network/FileDownloadService.htm

+0

使用服務的IMO不是OP想要爲他的應用程序做什麼,他確實需要使用AsyncTask,但是會以錯誤的方式進行。使用服務是不必要的開銷,它仍然在UI線程中(除非他創建了一個你說過的線程,但是它將把它移到服務中) –