我通过NotificationManager发布文件上传进度,但在更新进度UI时会冻结。
我使用NotificationCompat.Builder,并将其缓存在类字段中。因此,进度发布非常简单:
manager.notify(id, uploader.
setProgress(MAX_PROGRESS, (int) (progress * 100), false).
build()
);
更新进度保证从主线程执行(在Handler装饰器中包装)。
this.request.setCallback(new UploaderDecorator(this.request.getCallback()));
进展的发布如下所示:
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);
}
所以为什么它运行得如此缓慢?
Notification
。实际上,这可能会导致问题。 - CommonsWarebufferSize
的大小,你很有可能会使NotificationManager
过载。 - CommonsWareNotification
问题如何,我肯定会使用更大的缓冲区,仅出于性能考虑。最少8-16K。 - CommonsWare