Я использую поток 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());
}
};
}
Используйте AsyncTask вместо нити. –
но использование async задачи для загрузки большего файла нехорошо, я думаю. –
вы сделали нить, и поток не используется для обновления пользовательского интерфейса, здесь вы всегда пытаетесь уведомить mNotifyManager.notify (id, mBuilder.build()); поэтому панель уведомлений висит до остановки потока. –