在RemoteViews上调用setImageViewBitmap会导致令人难以置信的延迟

时间:2013-09-14 17:59:54

标签: android bitmap notifications

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

原始图稿Bitmap类似于1024x1024像素或左右。如果我直接为我的RemoteViews调用setImageBitmap(,),则会导致延迟。 如果我试图通过Bitmap #create()创建新的较小的Bitmap,那么仍然存在滞后。

那么,我做错了什么?

2 个答案:

答案 0 :(得分:1)

我也遇到过这种情况。 SetImageBitmap很昂贵,因为它必须封装IPC边界上的位图。这需要一个大的alloc才能将位图存储在IPC消息中,然后就是大量内存的实际编组。每次使用setImageViewBitmap时,您几乎总会看到GC_FOR_ALLOC消息。这是一个先发制人的GC(世界停止),这可能是你的滞后来源。

理想情况下,您应该将setImageViewUri与文件:// Uri一起使用,这可以缓解上述IPC问题并且速度相当快。

所以,最重要的是,如果你设置任何显着大小的位图(即大于小图标),你会看到这种滞后。

答案 1 :(得分:1)

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

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