View.isHardwareAccelerated()始终为false

时间:2012-08-25 06:28:52

标签: android hardware-acceleration

我在许多设备上都有一个硬件加速的视图。在该视图中,我需要能够检查是否使用了硬件加速。 According to Android SDK documentation,这是使用View.isHardwareAccelerated()完成的。有趣的是,在支持硬件加速的设备上进行测试时,即使Views本身实际上是硬件加速,此方法也总是返回false。 (我已经最终确认了这一点)它变得更加混乱:

如果我拨打View.getLayerType(),我会看到它始终设置为View.LAYER_TYPE_NONE。如果我拨打View.setLayerType(View.LAYER_TYPE_SOFTWARE),我可以有效地禁用硬件加速。我可以通过调用View.setLayerType(View.LAYER_TYPE_HARDWARE)View.setLayerType(View.LAYER_TYPE_NONE)重新启用它。为什么View.LAYER_TYPE_NONE启用硬件加速???

继续,对于支持hw加速的设备,似乎我可以通过检查View.LAYER_TYPE_SOFTWARE是否设置来检查状态,但是我怀疑这种方法不适用于不支持的设备加速度。我想知道我是否误用View.isHardwareAccelerated()或者它是否被打破了。

编辑: 我想我更接近理解这个问题了。这个问题也很有帮助:

Detect Hardware Acceleration at Runtime: Android

我的工作原理是View在调用构造函数时还不知道硬件是否加速,这就是我正在检查的地方。如果是这种情况,我想知道我可以在我的类中覆盖哪些扩展View,这将允许我成功检查硬件加速。我怀疑View.onSizeChanged(...)会起作用,但我想避免使用可能被多次调用的东西。

编辑#2:编辑#2: 看起来就是这样。我将支票移至View.onSizeChanged(),现在报告正确。我仍然想知道在我的视图中是否有更好的位置我可以移动此检查。

2 个答案:

答案 0 :(得分:4)

我自己一直在思考这个问题。很高兴看到你弄清楚问题是什么。文档确实正确地描述了这一点,但它并不十分清楚。 “返回:如果视图附加到窗口并且窗口是硬件加速的话,则返回”

答案 1 :(得分:1)

正如Diane Hackborn在这篇文章中提到的那样:https://groups.google.com/forum/#!topic/android-developers/vAH0HAZg0uU

在视图附加到窗口后,您应该检查isHardwareAccelerated() - 例如在onAttachedToWindow()!