我想使用 AsyncTask 同时(同时)下载所有文件。
我想弄清楚如何同时下载多个文件。我试图在互联网上搜索,但一无所获,但发现在很多应用程序中都可以做到这一点。
我还想提高我的应用程序(android)的稳定性,以便每次执行或刷新 UI 时都不会减慢进程--->“滞后”。
对不起,我的英语说得不太好。非常感谢。
我想使用 AsyncTask 同时(同时)下载所有文件。
我想弄清楚如何同时下载多个文件。我试图在互联网上搜索,但一无所获,但发现在很多应用程序中都可以做到这一点。
我还想提高我的应用程序(android)的稳定性,以便每次执行或刷新 UI 时都不会减慢进程--->“滞后”。
对不起,我的英语说得不太好。非常感谢。
像这样创建您的下载任务:
public class NewspaperDownloader extends AsyncTask<Void, Void, File> {
URL urlToDownload;
public DownloaderTask(URL urlToDownload) {
this.urlToDownload = urlToDownload;
}
protected void onPreExecute() {
// prepare your download here
}
protected String doInBackground(Void... params) {
// do your download here
[...]
}
protected void onPostExecute(File downloadedFile) {
// Do something with the download
}
}
如果您不知道如何在 Android 上的 AsyncTask 中下载文件,请查看我在此处提供的示例。
最后像这样调用你的下载:
// Task 1
DownloadTask task1 = new DownloadTask(urlToDownload);
task1.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
// Task 2
DownloadTask task2 = new DownloadTask(urlToDownload);
task2.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
// Task 3
DownloadTask task3 = new DownloadTask(urlToDownload);
task3.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
更新
从列表下载网址:
List<URL> urls = new ArrayList<URL>();
urls.add(...);
[...]
for(URL url : urls) {
DownloadTask task = new DownloadTask(url);
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
请注意, usingAsyncTask
可能无法为您提供所需的真正并行性。关键是,在不同版本的 Android 中AsyncTasks
,可以同时运行的数量已经从 1 变为 5,如果我没记错的话,再回到 1。在这里检查:
和这里:
https://groups.google.com/forum/?fromgroups#!topic/android-developers/8M0RTFfO7-M
此外AsyncTasks
,可能会被杀死,甚至可能无法运行。这是由于您无法控制AsyncTasks
的事实。如果不符合您的需求,ThreadPool
最好的解决方案是使用或构建您自己的.AsyncTask
Services
Loopers
ThreadPoolExecutor