未启用硬件加速

时间:2012-01-09 02:53:47

标签: android android-manifest

可能会发生一些愚蠢的事情,但我尝试在每个this tutorial定位3.1的应用中启用硬件加速。

我已将以下内容添加到我的清单中:

<uses-sdk 
    android:targetSdkVersion="12" 
    android:minSdkVersion="12" />

<application 
    ...
    android:hardwareAccelerated="true">

当我附加View时检查硬件加速状态(通过在覆盖isHardwareAccelerated()中调用onAttachedToWindow()),我返回true,所以看起来都很棒。问题是SurfaceView的Canvas没有被加速,因为canvas.isHardwareAccelerated()返回false。我正在检查surfaceCreated(),我也在那里也是如此,所以不知道Canvas正在失去这个设置。

任何指针?

EDIT1:

在Google Developers小组中找到thisthis,但如果我在onAttachedToWindow()中查看此内容,我确实在查看附件后进行检查,对吧?这是在运行3.1 BTW的联想平板电脑上。

EDIT2:

我尝试通过设置

禁用加速功能
<application 
    ...
    android:hardwareAccelerated="false">

我仍然看到onAttachedToWindow()中的视图返回真实,所以有些事情不在这里。我没有明确地从代码中调出hw accel,可能是特定于设备的问题?

此外,我在创建SurfaceView时偶尔在LogCat中看到以下行:

surface (identity=524) is invalid, err=-19 (No such device)

EDIT3:

在这里大声思考,但是有没有机会因为它是自己的线程,通过使用绘图循环的典型SurfaceView实现,如Lunar Lander,Canvas没有被加速?

1 个答案:

答案 0 :(得分:4)

这是预期的行为。 SurfaceView 硬件加速。 (link

自Android 4.0起,有一个新的TextureView(此处为example) 有关4.0之前的可用性,请参阅此SO question

更新:刚刚在Android 4.0的Transformer上测试过,而TextureView Canvas也没有进行硬件加速。 : - /

更新Android 6.0 :有一种新的硬件加速方法: https://developer.android.com/reference/android/view/Surface.html#lockHardwareCanvas()