使用Android下載文件,並在ProgressDialog中顯示進度

我正在嘗試編寫一個易於更新的簡單應用程序。 爲此,我須要一個簡單的函數,該函數能夠下載文件並在ProgressDialog 顯示當前進度 。 我知道如何執行ProgressDialog ,可是我不肯定如何首先顯示當前進度以及如何下載文件。 android


#1樓

是的,上面的代碼能夠工做。可是,若是您要在Asynctask onProgressUpdate中更新progressbar ,而後按返回按鈕或完成活動,則AsyncTask與UI失去聯繫。當您返回活動時,即便正在運行下載,後臺,您將不會在進度欄上看到任何更新。 所以,在OnResume()嘗試使用計時器任務運行相似runOnUIThread的線程,該計時器任務使用從AsyncTask運行後臺更新的值來更新progressbargit

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);
    }
};

當您的活動不可見時,別忘了銷燬線程。 github

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

#2樓

個人我的建議是使用進度對話框並在執行以前進行構建,或者在OnPreExecute()處啓動,若是您使用進度對話框的進度條的水平樣式,則常常發佈進度。 剩下的部分是優化doInBackground的算法。 算法


#3樓

不要忘記用新文件 (「 / mnt / sdcard / ...」)替換「 / sdcard ...」,不然您將獲得FileNotFoundException ide


#4樓

我建議您使用基於Volley的 Project Netroid 。 我添加了一些功能,例如多事件回調,文件下載管理。 這可能會有幫助。 函數


#5樓

我發現博客文章很是有幫助,它使用loopJ下載文件,它只有一個Simple函數,將對一些新的android有用。 oop

相關文章
相關標籤/搜索