2

我正在使用音乐控件创建通知。一切都很好,除了艺术品更新。

原始艺术品位图大概是 1024x1024 像素左右。如果我直接为我的 RemoteViews 调用 setImageBitmap(, ),它会导致滞后。如果我试图通过 Bitmap#create() 创建新的、更小的位图,那么仍然存在滞后。

那么,我做错了什么?

4

2 回答 2

2

布雷特是对的。但是,它看起来更像是一个错误而不是一个功能。

我没有重新使用具有不同位图的相同 RemoteView,而是每次使用新位图重新创建 RemoteView,然后将其发送到通知。奇怪的是,这不会造成太大的延迟。

于 2013-11-26T10:49:06.357 回答
1

我也遇到过这个。SetImageBitmap 很昂贵,因为它必须跨 IPC 边界编组位图。这需要一个大的分配,以便将位图存储在 IPC 消息中,然后是大块内存的实际编组。每次使用时,您几乎都会看到 GC_FOR_ALLOC 消息setImageViewBitmap。这是一个抢占式 GC(世界停止),这可能是您的滞后的来源。

理想情况下,您应该使用setImageViewUrifile:// Uri,这可以缓解上述 IPC 问题并且相当快。

因此,底线是,如果您设置任何显着尺寸的位图(即大于小图标),您将看到这种滞后。

于 2013-11-26T06:20:10.077 回答