Android Force GPU渲染如何启用和禁用?

我正在构build一个需要在canvas上进行大量绘制的应用程序。 我注意到,该应用程序是在高分辨率设备(例如nexus 7)有点laggy。 我看到开发人员选项中有一个强制GPU选项。 强制GPU启用时,我的应用程序运行绝对平滑。

我已经读过这个Force GPU选项被称为硬件加速,它只适用于Android 3.0及以上版本。

我的应用程序的目标是Android 2.3及以上。

是否有可能在任何Android 3.0或以上的设备上以编程方式启用硬件加速(或强制GPU – 无论魔术称为什么)?

就像是:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){ Turn On Hardware Accelerate HERE but How can i do this? any code snippet would be welcome/helpful/thanks } 

Solutions Collecting From Web of "Android Force GPU渲染如何启用和禁用?"

我假设你已经将android:hardwareAccelerated添加到你的Manifest文件中了?

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

这就是根据硬件加速指南在应用程序中实现硬件加速的原因,并且应该完成GPU在系统级别强制执行的操作。

将minSdkVersion设置为10,targetSdkVersion设置为最大值

像下面一样

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

然后

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

现在将工作

和特殊性

 if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB){ view.setLayerType(View.LAYER_TYPE_HARDWARE, null); } 

要么

 if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB){ view.setLayerType(View.LAYER_TYPE_SOFTWARE, null); } 

如果你想使用较低的API级别构build你的应用程序,你可以通过reflection来访问该方法:

  try { Method setLayerType = view.getClass().getMethod( "setLayerType", new Class[] { int.class, Paint.class }); if (setLayerType != null) setLayerType.invoke(view, new Object[] { LAYER_TYPE_X, null }); } catch (NoSuchMethodException e) { } catch (IllegalArgumentException e) { } catch (IllegalAccessException e) { } catch (InvocationTargetException e) { } 

其中LAYER_TYPE_X是所需图层types的常量整数值:

 LAYER_TYPE_NONE = 0 LAYER_TYPE_SOFTWARE = 1 LAYER_TYPE_HARDWARE = 2