Tutti,NDK Android: come pulire il codice nativo dopo aver riavviato l'attività?
Sono consapevole del fatto che per impostazione predefinita un'attività viene interrotta e riavviata quando l'orientamento dello schermo cambia, o una tastiera viene inserita o estratta. (Vedi Activity restart on rotation Android). La mia domanda è, qual è il modo corretto per gestire questo da una prospettiva di codice nativo? per esempio. se ho un blocco statico che carica una libreria nativa e la mia app viene riavviata, come faccio a garantire che qualsiasi memoria nella terra natia sia gestita in modo appropriato? Il problema è
Quando ruotiamo il dispositivo, sembra come un pool di thread viene creata e quelli vecchi non vengono mai rimossi. Questo significa che ogni volta che qualcuno trasforma il dispositivo, abbiamo una tonnellata più discussioni le mani in mano e prendendo memoria
Come faccio a garantire che ciò non accada? Vedo dalle JNIExample page alcune note in fondo:
[*] Questioni irrisolte e bug Anche se l'esempio è completamente funzionali, ci sono un paio questioni irrisolte residuo che mi non ero in grado di capire fino ad ora. I problemi appaiono quando si avvia l'attività , quindi si preme il pulsante Indietro per nasconderlo, quindi lo si riavvia. In base alla mia esperienza, le chiamate alle funzioni native in tale attività riavviata avranno esito negativo in modo spettacolare. callVoid() si blocca semplicemente con un errore di segmentazione , mentre le chiamate verso getNewData() e getDataString() causa JVM per interrompere con un errore, perché non è più contento della cache globalmente oggetto riferimento. Sembra che il riavvio di attività invalida in qualche modo i nostri cache riferimenti agli oggetti, anche se sono protette con NewGlobalRef(), e l'attività è in esecuzione all'interno del JVM originale (riavvio attività non non significa che JVM stessa è rinnovate) . Non ho una buona spiegazione del sul motivo per cui ciò accade, quindi se avete idee, per favore, datemi il numero .
È stato risolto?