2016-03-18 2 views
0

Я использую поток java для загрузки zip-файла из API. Когда я начну загружать файл, процесс загрузки будет отображаться на панели уведомлений. когда я прокручиваю панель уведомлений, у нее нет ответа. Просто повесить устройство до завершения загрузки. Если загрузка выполнена, тогда нет проблем в панели уведомлений прокрутки.панель уведомлений не отвечает при загрузке элемента с использованием java-потока в android

мой вопрос:

1.how, чтобы сделать приложение работать гладко без каких-либо лаг есть ли другой способ справиться с ходом загрузки в Android?.

2.the app take some time to start download.is there any problem with the code that i am using. 

вот мой код:


protected void doDownload(final String urlLink, final String fileName) { 


     final Thread dx = new Thread() { 

      public void run() { 
       File root = android.os.Environment.getExternalStorageDirectory(); 
       File dir = new File(root.getAbsolutePath() + "/EriReader/temp/"); 
       if (dir.exists() == false) { 
        dir.mkdirs(); 

       } 
       //Save the path as a string value 
       try { 
        URL url = new URL(urlLink); 
        Log.i("FILE_NAME", "File name is " + fileName); 
        Log.i("FILE_URLLINK", "File URL is " + url); 
        URLConnection connection = url.openConnection(); 
        connection.connect(); 
        // this will be useful so that you can show a typical 0-100% progress bar 
        final int fileLength = connection.getContentLength(); 

        // download the file 
        InputStream input = new BufferedInputStream(url.openStream()); 
        OutputStream output = new FileOutputStream(dir + "/" + fileName); 

        byte data[] = new byte[1024]; 
        long total = 0; 
        int count; 
        while ((count = input.read(data)) != -1) { 
         total += count; 
         if (fileLength > 0) { 
          int status = ((int) (total * 100/fileLength)); 

         // Notification in notification bar 
          mBuilder.setProgress(100, status, false); 
          mNotifyManager.notify(id, mBuilder.build()); 
         } 
         output.write(data, 0, count); 
        } 

        output.flush(); 
        output.close(); 
        input.close(); 

       } catch (Exception e) { 
        e.printStackTrace(); 
        Log.i("DOWNLOADING err", "ERROR IS" + e); 
       } 


       mBuilder.setContentText("Download complete") 
         // Removes the progress bar 
         .setProgress(0, 0, false); 
       mNotifyManager.notify(id, mBuilder.build()); 

      } 

     }; 
} 
+0

Используйте AsyncTask вместо нити. –

+0

но использование async задачи для загрузки большего файла нехорошо, я думаю. –

+0

вы сделали нить, и поток не используется для обновления пользовательского интерфейса, здесь вы всегда пытаетесь уведомить mNotifyManager.notify (id, mBuilder.build()); поэтому панель уведомлений висит до остановки потока. –

ответ