-1

我想使用 AsyncTask 同时(同时)下载所有文件。

我想弄清楚如何同时下载多个文件。我试图在互联网上搜索,但一无所获,但发现在很多应用程序中都可以做到这一点。

我还想提高我的应用程序(android)的稳定性,以便每次执行或刷新 UI 时都不会减慢进程--->“滞后”。

对不起,我的英语说得不太好。非常感谢。

4

2 回答 2

0

像这样创建您的下载任务:

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);
}
于 2013-07-19T10:12:28.667 回答
0

请注意, usingAsyncTask可能无法为您提供所需的真正并行性。关键是,在不同版本的 Android 中AsyncTasks,可以同时运行的数量已经从 1 变为 5,如果我没记错的话,再回到 1。在这里检查:

https://github.com/android/platform_frameworks_base/commits/master/core/java/android/os/AsyncTask.java

和这里:

https://groups.google.com/forum/?fromgroups#!topic/android-developers/8M0RTFfO7-M

此外AsyncTasks,可能会被杀死,甚至可能无法运行。这是由于您无法控制AsyncTasks的事实。如果不符合您的需求,ThreadPool最好的解决方案是使用或构建您自己的.AsyncTaskServicesLoopersThreadPoolExecutor

于 2013-07-19T19:32:16.660 回答