mmin18 / RealtimeBlurView

A realtime blurring overlay for Android (like iOS UIVisualEffectView)
Other
3.17k stars 343 forks source link

关于性能 #2

Closed pqpo closed 7 years ago

pqpo commented 7 years ago

之前用过500px-android-blur 发现模糊损耗的时间大约小于5ms 大部分时间消耗在了重复绘制上,有时候超过16ms,造成丢帧: mBlurredView.draw(mBlurringCanvas) 而且还有一个使用上的不便,比如滑动ListView的时候需要监听滑动事件,然后调用mBlurredView.postInvalidate()来重新绘制背景。

看了你的项目,使用了ViewTreeObserver.OnPreDrawListener,这样是不是就避免了第二个问题(不需要调用mBlurredView.postInvalidate()来重新绘制背景), 但是对于第一个问题,其中也需要绘制到canvas上,是不是也会造成丢帧。

mmin18 commented 7 years ago

也会的,如果这个Activity的view非常复杂,decorView.draw()的时间很长,也会造成丢帧的。 RealtimeBlurView的理念是满足大多数使用情况下,零成本(除了添加View不需要其他的代码)的实现模糊效果。 如果你的场景真的丢帧比较多,有两个可行的做法:1. 提高downsample到8或者16。2. 用500px-android-blur并有针对性的优化。