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

这一生的挚爱 提交于 2019-12-13 17:10:43

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

我正在尝试编写一个易于更新的简单应用程序。 为此,我需要一个简单的函数,该函数可以下载文件并在ProgressDialog 显示当前进度 。 我知道如何执行ProgressDialog ,但是我不确定如何首先显示当前进度以及如何下载文件。


#1楼

是的,上面的代码可以工作。但是,如果您要在Asynctask onProgressUpdate中更新progressbar ,然后按返回按钮或完成活动,则AsyncTask与UI失去联系。当您返回活动时,即使正在运行下载,后台,您将不会在进度栏上看到任何更新。 因此,在OnResume()尝试使用计时器任务运行类似runOnUIThread的线程,该计时器任务使用从AsyncTask运行后台更新的值来更新progressbar

private void updateProgressBar(){
    Runnable runnable = new updateProgress();
    background = new Thread(runnable);
    background.start();
}

public class updateProgress implements Runnable {
    public void run() {
        while(Thread.currentThread()==background)
            //while (!Thread.currentThread().isInterrupted()) {
            try {
                Thread.sleep(1000); 
                Message msg = new Message();
                progress = getProgressPercentage();        
                handler.sendMessage(msg);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            } catch (Exception e) {
        }
    }
}

private Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        progress.setProgress(msg.what);
    }
};

当您的活动不可见时,别忘了销毁线程。

private void destroyRunningThreads() {
    if (background != null) {
        background.interrupt();
        background=null;
    }
}

#2楼

我的个人建议是使用进度对话框并在执行之前进行构建,或者在OnPreExecute()处启动,如果您使用进度对话框的进度条的水平样式,则经常发布进度。 剩下的部分是优化doInBackground的算法。


#3楼

不要忘记用新文件 (“ / mnt / sdcard / ...”)替换“ / sdcard ...”,否则您将得到FileNotFoundException


#4楼

我建议您使用基于Volley的 Project Netroid 。 我添加了一些功能,例如多事件回调,文件下载管理。 这可能会有帮助。


#5楼

我发现博客文章非常有帮助,它使用loopJ下载文件,它只有一个Simple函数,将对一些新的android有用。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!