La aceleración de hardware no está habilitada
Probablemente algo tonto, pero estoy tratando de habilitar la aceleración de hardware en una aplicación de orientación 3.1, por este tutorial .
He añadido lo siguiente a mi manifiesto:
- Cambiar el estilo del botón en toda la aplicación
- ¿Qué hace el atributo android: configChanges = "screenSize"?
- Android Market ocultar mi aplicación a alguna tableta (como Nexus 7)
- Android: "El servidor no pudo procesar tu apk. Intentar de nuevo .. "error al cargar en el mercado
- Filtrado de Android NDK y Google Play
<uses-sdk android:targetSdkVersion="12" android:minSdkVersion="12" /> <application ... android:hardwareAccelerated="true">
Cuando compruebo el estado de la aceleración de hardware después de que la vista se adjunta (llamando isHardwareAccelerated()
en un overriden onAttachedToWindow()
) me devuelven true, por lo que todo se ve muy bien. El problema es que el lienzo de SurfaceView NO está siendo acelerado, como canvas.isHardwareAccelerated()
devuelve false. Estoy comprobando en surfaceCreated()
, y me pongo cierto allí también, así que no hay idea de whay la lona está perdiendo este ajuste.
¿Algún puntero?
EDIT1:
Encontré esto y esto en el grupo de desarrolladores de Google, pero de hecho estoy comprobando después de la vista se adjunta si estoy comprobando esto en onAttachedToWindow()
, ¿verdad? Esto está en una tableta de Lenovo que funciona 3.1 BTW.
EDIT2:
He intentado inhabilitar la aceleración vía el ajuste
<application ... android:hardwareAccelerated="false">
Y todavía estoy viendo verdadero devuelto de la vista en onAttachedToWindow()
, así que algo no está aquí. No estoy explícitamente chanbing aceleración hw de código, tal vez un problema específico del dispositivo?
También, veo la línea siguiente esporádicamente en LogCat cuando se crea el SurfaceView:
surface (identity=524) is invalid, err=-19 (No such device)
EDIT3:
Sólo pensando en voz alta aquí, pero ¿hay alguna posibilidad de que el lienzo no se está acelerando debido al hecho de que está en su propio hilo, a través de la aplicación SurfaceView típica que utiliza un bucle de dibujo, como Lunar Lander?
- Flujo de control de aplicaciones de Android?
- android: <soportes-pantallas> Etiqueta
- Detectar el android de mi aplicación: versionCode en tiempo de ejecución
- Deshabilitar permiso de biblioteca de dependencias
- NullPointerException en mapFragment.getMapAsync
- Aplicación de Android Run de la última actividad
- Subido APK a Play Store, tiene 0 dispositivos compatibles, pero no hay error
- No se puede establecer diferentes iconos / etiquetas para la aplicación y la actividad del lanzador de manifiesto
Este es el comportamiento esperado. SurfaceView no está acelerado por hardware. ( Enlace )
Desde Android 4.0 hay un nuevo TextureView (aquí hay un ejemplo ).
Véase también esta pregunta de SO para disponibilidad pre-4.0.
Actualización: Acaba de probar en un Transformer con Android 4.0 y el Canvas TextureView no es HW acelerado tampoco. : – /
Actualización de Android 6.0: hay un nuevo método para la aceleración de hardware: https://developer.android.com/reference/android/view/Surface.html#lockHardwareCanvas ()
- El contenido de Webview de Android no debe perderse en el cambio de orientación, pero la GUI debe actualizarse correctamente
- Android Problema: EditText, KeyListener y el botón físico anterior