首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步文件下载器android

异步文件下载器android
EN

Stack Overflow用户
提问于 2012-03-27 15:26:34
回答 5查看 1.8K关注 0票数 2

我开始创建文件下载类。这就是我所拥有的:

代码语言:javascript
复制
public class Downloader {

    //download url
    URL url;

    public Downloader(URL downloadURL){
        url = downloadURL;
    }


      public void toFile(File fName) {
            try {

                HttpURLConnection urlConnection = (HttpURLConnection) url
                        .openConnection();

                urlConnection.setRequestMethod("GET");
                urlConnection.setDoOutput(true);

                urlConnection.connect();

                FileOutputStream fileOutput = new FileOutputStream(fName);

                InputStream inputStream = urlConnection.getInputStream();

                byte[] buffer = new byte[1024];
                int bufferLength = 0;

                while ((bufferLength = inputStream.read(buffer)) > 0) {
                    fileOutput.write(buffer, 0, bufferLength);

                }

                fileOutput.close();

            } catch (Exception e) {
                e.printStackTrace();
            }
        }




}

我需要在新线程中调用这个下载器。也许有人能给我一些提示,为什么我需要为此调用新的线程或asyc任务。

代码语言:javascript
复制
public void downloadFile(String urlToDownload,String path) throws MalformedURLException{




        new Thread(new Runnable() {
            public void run() {
                new Downloader(new URL(urlToDownload)).toFile(new File(path));

                 }


          }).start();
}

所以当我想下载我的文件时,它是异步下载的。

我不是真的想要那样。我想创建下载程序,我可以选择是同步还是异步下载文件。

但首先,我想知道文件是什么时候下载的。我怎么会知道呢?

也许有人做了这件事,可以帮助我。我需要知道文件什么时候下载的。

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-03-27 15:45:34

  1. 你不能在主线程上下载任何东西,在3.0版和更高版本中,你会看到一个应用程序不响应的对话框,而在3.0和更高版本中,简单地获取当前方法几乎是正确的。
  2. 如果你想发布下载的进度并通知UI关于完成的下载,你可以使用AsyncTaskHandlerIntent来通知任何应用程序组件关于完成的下载。
票数 4
EN

Stack Overflow用户

发布于 2012-03-27 15:49:27

在您调用

  • ()之后,当线程启动时,start启动。为了方便起见,通常使用异步任务,如matemink解决方案:

+方法doInBackground()将在工作线程中运行

+方法onPostExecute(0将运行以更新UI线程

  • 以供您关注:

我需要在新线程中调用这个下载器。也许有人可以提示我为什么需要为此调用新的线程或asyc任务

Answer:你需要在单独的线程或异步任务中下载,以避免ANR对话̣̣(如果你需要下载大文件或者你的网络连接很慢,这可能会导致ANR对话在主UI线程中),这就是为什么你需要将高工作负载实现放在工作线程中而不是主UI线程中:

参考:http://developer.android.com/guide/practices/design/responsiveness.html

票数 2
EN

Stack Overflow用户

发布于 2012-03-27 15:36:14

使用Handler了解您的文件何时下载。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9885043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档