1

我想知道是否有一种方法可以在不使用异步任务的情况下将文件下载到 android 设备。

我的问题是我想在我的应用程序中使用一个异步任务,我需要在这个 asyncTask 内部调用一个下载函数,但是 android 的文档说只能从 UI 线程创建一个 asyncTask。

我尝试通过使用extends thread而不是创建一个线程extends asyncTask,但android仍然给出了“UI线程异常上的网络”。

我需要一个像这样工作的函数: String downloadFile(String url){...} 返回下载的字符串(我正在下载一个 xml 文件,没什么特别的)

4

2 回答 2

2

我需要在这个 asyncTask 里面调用一个下载函数

如果“INSIDE this asyncTask”真的意味着“来自”的doInBackground()方法AsyncTask,那么“下载函数”(不管什么)不需要是异步的。

but android still said the "Network on UI thread exception"

Then you are not doing the network I/O from doInBackground() of an AsyncTask or by any background means (e.g., from a regular Thread that you fork).

于 2013-01-15T16:12:18.737 回答
0

您可以通过服务在 Android 中下载文件。

服务是一个应用程序组件,它代表应用程序希望在不与用户交互的情况下执行更长时间运行的操作,或提供功能供其他应用程序使用。每个服务类必须在其包的 AndroidManifest.xml 中有相应的声明。可以使用 Context.startService() 和 Context.bindService() 启动服务。

请注意,服务与其他应用程序对象一样,在其托管进程的主线程中运行。这意味着,如果您的服务要执行任何 CPU 密集型(例如 MP3 播放)或阻塞(例如网络)操作,它应该生成自己的线程来完成这项工作。更多信息可以在进程和线程中找到。IntentService 类可作为 Service 的标准实现使用,它有自己的线程来安排要完成的工作。

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

于 2013-01-15T16:11:52.670 回答