【发布时间】:2013-08-04 13:41:56
【问题描述】:
我通过 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。事实上,这可能会导致您的问题。 -
@CommonsWare 移除了装饰器,比较了 id 进程,因为它们是不同的,但问题仍然存在。通知栏中的问题,我的应用程序以相同的速度运行。
-
可能是因为通知发送太频繁?
-
我在通知中看到的大多数下载进度条似乎并不经常更新——可能每隔几秒钟更新一次。你肯定有可能淹没
NotificationManager,这取决于bufferSize的大小。 -
好吧,我当然会使用更大的缓冲区,不管
Notification问题如何,只是为了提高性能。至少 8-16K。
标签: android android-notifications