Todo,Android NDK: cómo limpiar el código nativo después de reiniciar la actividad?
Soy consciente de que, de forma predeterminada, una actividad se eliminará y se reiniciará cuando cambie la orientación de la pantalla o cuando se deslice hacia adentro o hacia afuera. (Ver Activity restart on rotation Android). Mi pregunta es, ¿cuál es la forma correcta de manejar esto desde una perspectiva de código nativo? p.ej. si tengo un bloque estático cargando una biblioteca nativa y mi aplicación se reinicia, ¿cómo me aseguro de que cualquier memoria en la tierra nativa se trate de manera adecuada? El problema es
Cuando hacemos girar el dispositivo, se ve como un conjunto de subprocesos por separado se crea y los antiguos no se eliminan. Esto significa que cada vez que alguien gira el dispositivo, tenemos una tonelada más hilos sentados sin hacer nada y tomando memoria
¿Cómo puedo garantizar que esto no suceda? Veo en los JNIExample page algunas notas en la parte inferior:
[*] Los problemas no resueltos y los insectos Incluso aunque el ejemplo es totalmente funcional, hay un par problemas que quedan por resolver, que no era capaz de averiguar hasta ahora. Los problemas aparecen cuando inicia la actividad , luego presiona el botón Atrás para ocultarlo, y luego lo vuelve a iniciar. En mi experiencia, las llamadas a las funciones nativas en dicha actividad reiniciada fallarán espectacularmente. callVoid() simplemente se bloquea con un error de segmentación , mientras que las llamadas a getNewData() y getDataString() causa JVM para abortar con un error, porque ya no es contento con el caché a nivel mundial referencia de objeto. Parece que la actividad reinicio de alguna manera se pierde el caché referencias a objetos, a pesar de que están protegidas con NewGlobalRef(), y la actividad se está ejecutando dentro del JVM originales (reinicio actividad no no quiere decir que la propia JVM está renovadas) . No tengo una buena explicación de sobre por qué sucede eso, así que si tiene alguna idea, , déjeme saber .
¿Se ha solucionado esto?