Android:从服务器下载文件,并使用AsyncTask在通知栏中显示下载进度

我正在使用这个例子使用AsycTask从服务器上下载一个文件,并在通知栏中显示downlaod进度。 我只是修改了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]); } 

一切都会好起来,除了我不能拉下通知栏。 为什么?

以下是摘自评论。

你可以在publishProgress之前放一个睡眠(1000)方法并检查。 只是一个猜测

是的,它的工作,但下载正在放缓

希望你了解这个问题。 由于您经常更新通知栏,因此无法将其拉下。 通过增加数据块大小或通过更新进度条上每4或更多kb,而不是1kb,可以避免此问题。

以上不会减慢数据下载。

你应该重写onProgressUpdate方法来更新你的UI。