9

このを使用してサーバーからファイルをダウンロードAsycTaskし、通知バーにダウンロードの進行状況を表示しています。doInBackgroundファイルをダウンロードするためにメソッドを変更しました。

@Override
    protected Void doInBackground(String... Urls) {
        //This is where we would do the actual download stuff
        //for now I'm just going to loop for 10 seconds
        // publishing progress every second
        try {   
            URL url = new URL(Urls[0]);
            URLConnection connection = url.openConnection();
            connection.connect();
            // this will be useful so that you can show a typical 0-100%
            // progress bar
            int fileLength = connection.getContentLength();

            // download the file
            InputStream input = new BufferedInputStream(url.openStream());
            OutputStream output = new FileOutputStream( _context.getFilesDir() + "/file_name.apk");

            byte data[] = new byte[1024];
            long total = 0;
            int count;
            while ((count = input.read(data)) != -1) {
                total += count ;
                // publishing the progress....
                publishProgress((int) (total * 100 / fileLength));
                output.write(data, 0, count);
            }
            output.flush();
            output.close();
            input.close();      
        }
        catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }


protected void onPreExecute() {
        // Create the notification in the statusbar
        mNotificationHelper.createNotification();
    }


protected void onPostExecute(Void result) {
        // The task is complete, tell the status bar about it
        mNotificationHelper.completed();
    }

protected void onProgressUpdate(Integer... progress) {
        // This method runs on the UI thread, it receives progress updates
        // from the background thread and publishes them to the status bar
        mNotificationHelper.progressUpdate(progress[0]);
    }

通知バーをプルダウンできないことを除いて、すべてがうまくいっています。なんで?

4

2 に答える 2

4

以下、コメントから抜粋。

publishProgress の前に sleep(1000) メソッドを入れて確認してください。ただの推測

-

はい、動作しますが、ダウンロードが遅くなります

問題を理解していただければ幸いです。通知バーを頻繁に更新しているため、プルダウンできません。データのチャンク サイズを増やすか、進行状況バーを 1kb ではなく 4kb 以上ごとに更新することで、この問題を回避できます。

上記は、データのダウンロードを遅くしません。

于 2012-07-16T17:46:53.677 に答える
2

UI を更新するには、 onProgressUpdateメソッドをオーバーライドする必要があります。

于 2012-07-13T12:38:00.993 に答える