使用硬件加速的注意事项

为提高app的整体性能,在manifest文件中配置的时候,有可能会启动硬件加速,如下

android:hardwareAccelerated="true"

配置后,发现设备在4.0.4与4.0.3这样的版本上使用图片剪裁功能的时候会crash,捕获到的异常信息如下

java.lang.UnsupportedOperationException at android.view.GLES20Canvas.clipPath(GLES20Canvas.java:429)

查询代码发现,在图片剪裁的时候有使用到Canvas.clipPath(path, Region.Op.DIFFERENCE);这个函数

作为Canvas的一个实现类GLES20Canvas,在使用硬件加速的时候会被使用到。

查询GLES20Canvas的源代码,发现在4.0.4与4.0.3这两个版本中,clipPath的实现均为如下代码

public boolean clipPath(Path path, Region.Op op) {
         throw new UnsupportedOperationException();
 }

 直到4.1.1这个版本,sdk中的才进行了具体的实现

@Override
public boolean clipPath(Path path, Region.Op op) {
         // TODO: Implement
         path.computeBounds(mPathBounds, true);
        return nClipRect(mRenderer, mPathBounds.left, mPathBounds.top,
                mPathBounds.right, mPathBounds.bottom, op.nativeInt);
     }

 也就是说,在使用Canvas.clipPath的时候必须要特别注意如果app要使用硬件加速,应该把涉及clipPath的Activity排除在外,配置方法是:

在manifest中activity的配置处配置android:hardwareAccelerated ="false"

猜你喜欢

转载自lynen.iteye.com/blog/1897299