I publish file upload progress via NotificationManager, but while updating its progress UI freezes.
I use NotificationCompat.Builder, which cached in the class field. So progress publishing is a very simple:
manager.notify(id, uploader.
setProgress(MAX_PROGRESS, (int) (progress * 100), false).
build()
);
Update progress is guaranteed to execute from the main thread(wrapped in Handler decorator).
this.request.setCallback(new UploaderDecorator(this.request.getCallback()));
The very publication of progress is as follows:
long total = file.length();
long uploaded = 0;
int bytesRead = input.read(buffer, 0, bufferSize);
while (bytesRead > 0) {
output.write(buffer, 0, bufferSize);
uploaded += bytesRead;
callback.onUploadProgress(activeFile, ((float) uploaded / total));
bytesRead = input.read(buffer, 0, bufferSize);
}
So why it's works so slow?
This is a common behavior. You shouldn't flood the NotificationManager with frequent updates. You should decide an interval to update, like twice every second.
For example,
This works perfectly for me and doesn't freeze the notifications too.