force android canvas gpu hardware-acceleration

android - force 4x msaa



Android Force GPU Rendering Cómo habilitar y deshabilitar? (3)

Estoy construyendo una aplicación que requiere mucho dibujo en el lienzo. Noté que la aplicación es un poco lenta en dispositivos con alta resolución (nexus 7, por ejemplo). Vi que hay una opción Force GPU en la opción de desarrollador. Cuando Force GPU está habilitado, mi aplicación funciona sin problemas.

He leído que esta opción Force GPU se llama Hardware Acceleration y está disponible solo para Android 3.0 y versiones posteriores.

Mi aplicación está dirigida a Android 2.3 y superior.

¿Es posible activar programáticamente hardware acelerado (o Force GPU, como se llame la magia) en cualquier dispositivo con Android 3.0 o superior?

Algo como:

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 }


Supongo que ya ha agregado android: hardwareAccelerated a su archivo Manifest?

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

Eso es lo que permite la aceleración de hardware dentro de su aplicación según la guía de aceleración de hardware y debería hacer exactamente lo que hace forzar a la GPU a nivel de sistema.


Establezca minSdkVersion en 10 y targetSdkVersion en el máximo

Como abajo

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

entonces

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

Ahora funcionará

Y para las particularidades

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

o

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


Si desea construir su aplicación utilizando un nivel de API más bajo, puede acceder al método a través de la reflexión:

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) { }

Donde LAYER_TYPE_X es el valor entero constante del tipo de capa deseada:

LAYER_TYPE_NONE = 0 LAYER_TYPE_SOFTWARE = 1 LAYER_TYPE_HARDWARE = 2