La aplicación se bloquea Android 4.3+ en código nativo con la aplicación usando cálculos de matriz en un lienzo

StackOverflow https://stackoverflow.com//questions/20022243

Pregunta

Antes de pasar más tiempo leyendo esto de lo necesario: yo mismo responderé a esta pregunta. Pasé un día completo depurando esto y pensé que debería compartir.

Soy el desarrollador para una aplicación que es básicamente una especie de navegación a turnos en campos de golf. Como tal, tengo imágenes que deben girarse para hacer que la imagen orientada hacia el norte. Esto obviamente requiere algunas transformaciones de matriz.

Después de Android 4.3 fue presionado al HTC ONE, obtuve algunas quejas de que la aplicación simplemente estaba cerrando siempre que alguien quisiera usarla. "Lamentablemente se ha detenido".

Mi sesión de depuración inicial no limpió nada. No hubo excepción que se lanzaron, por lo que nada de lo que pasar por inicialmente. Encontré lo siguiente en mis registros:

11-12 14: 12: 56.257: Asfirmación / libc (5206): señal fatal 11 (SIGSEGV) AT 0x00000000 (código= 1), hilo 5206 (ndroid.appName)

con ninguna parte para que realmente comience a depurar, estuve a largo plazo de la vieja escuela a través de todo, identificando sospechosos probables y mucha cafeína, pero al final me di cuenta con la ayuda de un colega que había escrito el Código que resultó ser el culpable.

¿Fue útil?

Solución

Como resultado, esta línea estaba causando todos los problemas: lienzo.setmatrix (null);

La intención de esta línea fue simple: reinicie la matriz de transformación de nuevo a la matriz de identidad para que se pueda aplicar una nueva transformación. Según la documentación , Esto está permitido:

Reemplace completamente la matriz actual con la matriz especificada. Si el parámetro Matrix es nulo, entonces la matriz actual se restablece a la identidad.

Aparentemente, las personas que trabajan en Android eliminaron este cheque por un parámetro nulo del código 4.3, pero no lo considere necesario actualizar la documentación o lanzar una excepción decente. En su lugar, esta línea simplemente se bloquea todo sin una pista de donde sucedió y por qué.

He archivado una Informe de errores Si alguien está interesado. Espero que eso o este hilo ayude a alguien en la misma situación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top