2013-01-15 184 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线程中(除非他创建了一个你说过的线程,但是它将把它移到服务中) –