在视图、window和activity级别控制硬件加速的目的是什么?
What is the purpose of controlling hardware acceleration at the view, window and activity level?
我正在阅读有关硬件加速的文章,看到它提到您可以在 window、视图和 activity 级别控制它。如此细粒度的控制是否有原因?我认为如果你想禁用或启用硬件加速,应用程序级别绰绰有余。
关于硬件加速的粒度有几个原因。 Romain Guy 在这篇 article 中提出了很多要点。
一个特定的senerio会处于记忆紧张的情况下;这是文章中的引述:
Since hardware layers consume video memory, it is highly recommended
you enable them only for the duration of the animation. This can be
achieved with animation listeners:
view.setLayerType(View.LAYER_TYPE_HARDWARE, null);
ObjectAnimator animator = ObjectAnimator.ofFloat(
view, "rotationY", 180);
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
view.setLayerType(View.LAYER_TYPE_NONE, null);
}
});
animator.start();
所以,也许您只想在某些视图上启用它们以节省内存,但仍希望动画 运行 流畅,所以您使用硬件加速。
其他原因可能源于某些自定义视图对图形管道的不当使用,因此您可能会遇到性能问题或屏幕撕裂并希望在该特定视图上将其关闭。
我正在阅读有关硬件加速的文章,看到它提到您可以在 window、视图和 activity 级别控制它。如此细粒度的控制是否有原因?我认为如果你想禁用或启用硬件加速,应用程序级别绰绰有余。
关于硬件加速的粒度有几个原因。 Romain Guy 在这篇 article 中提出了很多要点。
一个特定的senerio会处于记忆紧张的情况下;这是文章中的引述:
Since hardware layers consume video memory, it is highly recommended you enable them only for the duration of the animation. This can be achieved with animation listeners:
view.setLayerType(View.LAYER_TYPE_HARDWARE, null); ObjectAnimator animator = ObjectAnimator.ofFloat( view, "rotationY", 180); animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { view.setLayerType(View.LAYER_TYPE_NONE, null); } }); animator.start();
所以,也许您只想在某些视图上启用它们以节省内存,但仍希望动画 运行 流畅,所以您使用硬件加速。
其他原因可能源于某些自定义视图对图形管道的不当使用,因此您可能会遇到性能问题或屏幕撕裂并希望在该特定视图上将其关闭。