当前位置: 首页 > 面试题库 >

更新进度对话框

夏宪
2023-03-14
问题内容

我正在尝试制作一个可以帮助我评估从Web资源下载文件的时间的应用程序。我发现了2个样本:

使用Android下载文件,并在ProgressDialog中显示进度

http://www.helloandroid.com/tutorials/how-download-fileimage-url-
您的设备

第二个示例显示了较小的下载时间,但是我不明白如何使用它来更新进度对话框。我认为在第二种情况下应该使用“
while”表达来完成某些事情,但是我找不到。有人可以给我一些建议吗?

UPD:

第一个代码:

try {
            time1 = System.currentTimeMillis();
            URL url = new URL(path);
            URLConnection conexion = url.openConnection();
            conexion.connect();
            // this will be useful so that you can show a tipical 0-100% progress bar
            int lenghtOfFile = conexion.getContentLength();
            // downlod the file
            InputStream input = new BufferedInputStream(url.openStream());
            OutputStream output = new FileOutputStream("/sdcard/analyzer/test.jpg");

            byte data[] = new byte[1024];

            long total = 0;

          time11 = System.currentTimeMillis();
           while ((count = input.read(data)) != -1) {
                total += count;
                // publishing the progress....
                publishProgress((int)(total*100/lenghtOfFile));
                output.write(data, 0, count);
            }
            time22= System.currentTimeMillis()-time11;
            output.flush();
            output.close();
            input.close();


        } catch (Exception e) {}

        timetaken = System.currentTimeMillis() - time1;

第二个代码:

       long time1 = System.currentTimeMillis();
        DownloadFromUrl(path, "test.jpg");
        long timetaken = System.currentTimeMillis() - time1;

哪里

  public void DownloadFromUrl(String imageURL, String fileName) {  //this is the downloader method
 try {
         URL url = new URL(imageURL); //you can write here any link
         File file = new File(fileName);

        /*Open a connection to that URL. */
         URLConnection ucon = url.openConnection();

         /*
          * Define InputStreams to read from the URLConnection.
          */
         InputStream is = ucon.getInputStream();
         BufferedInputStream bis = new BufferedInputStream(is);

         /*
          * Read bytes to the Buffer until there is nothing more to read(-1).
          */
         ByteArrayBuffer baf = new ByteArrayBuffer(50);
         int current = 0;
         while ((current = bis.read()) != -1) {
                 baf.append((byte) current);
         }

         /* Convert the Bytes read to a String. */
         FileOutputStream fos = new FileOutputStream(PATH+file);
         fos.write(baf.toByteArray());
         fos.close();

 } catch (IOException e) {
         Log.d("ImageManager", "Error: " + e);
 }

因此,问题在于第一种方法似乎要慢30%。


问题答案:

在第二个例子中可以运行得更快,但它垄断了GUI线程。第一种方法使用AsyncTask更好。它允许GUI在下载进行时保持响应。

我发现它有助于比较AsyncTaskSwingWorker,如本例。



 类似资料:
  • 本文向大家介绍Android 中通过实现线程更新Progressdialog (对话进度条),包括了Android 中通过实现线程更新Progressdialog (对话进度条)的使用技巧和注意事项,需要的朋友参考一下 作为开发者我们需要经常站在用户角度考虑问题,比如在应用商城下载软件时,当用户点击下载按钮,则会有下载进度提示页面出现,现在我们通过线程休眠的方式模拟下载进度更新的演示,如图(这里为

  • 问题内容: 我是android开发的新手。我想在我的应用程序中使用开发一个。当我单击“搜索”按钮时,应当与一起出现,表明在切换到另一个按钮之前进度一直在进行。请给我推荐示例代码。 问题答案: 使用。不过,您应该在new上进行工作,并在完成时使用a 回调到。这是我的方法:

  • 我在Android上用RxJava更新ProgressBar的进度有问题我想在延迟500毫秒后更新1%(从0%- 下面是我的代码:

  • 我的kivy应用程序中有一个ProgressBar。我相信我需要使用,以确保从循环内部更新进度条。 以下代码是用于再现性目的的淡化版本。 ProgressBar类 主要类别: KV文件 此示例显示loading_pb.value按钮单击后代码循环时发生的变化。 进步吧。价值印刷输出 问题进度条的值似乎确实如预期的那样递增,但实际进度条直到循环结束时才立即改变。 相关的 无法更新kivy进度条 ki

  • 问题内容: 我的应用程序中出现JavaFX(jdk 1.8.0_91)上的一个讨厌的错误,该错误中显示并更新了几个进度条(随机或同时显示)。有时,尤其是在填充进度条时(它具有进度条的样式类),但有时甚至一无所获,软件块和该跟踪出现了几次(并非总是相同的数字,而是最后一次)一次是27次): 然后在这27条痕迹之后跟随着大量的此消息: 线程“ JavaFX应用程序线程”中的异常java.lang.Ar

  • 我有一个片段,我有一个listview。当我按下listview position时,我打开片断对话框,在其中我发送所单击项目的位置。在那里,我可以从ListView实时更改一些数据。但是当我改变我的方向(片段和对话框片段都有不同的布局)时,live更改不再起作用。如果我去另一个片段,比回来,改变是做了,但不是活着。 两者都将SetRetaInstance设置为true。 在片段中设置适配器: 对