Деятельность Android уничтожена, но значение глобальных переменных нативного кода все еще сохраняется. Зачем?
В моем приложении для Android есть собственный код C, использующий JNI. Когда приложение уничтожается и запускается снова, значение глобальной переменной нативного кода остается неизменным или неинициализированным. Эта глобальная переменная установлена как NULL в точке ее объявления, но ее значение такое же, как и раньше.
AVFormatContext *gFormatCtx = NULL;
int openMovie(const char filePath[])
{
if (gFormatCtx != NULL) // <- here, gFormatCtx is not null when the app is started at the second time. And its value is same as it was of first run.
return -1;
}
Итак, я думаю, что процесс нативного кода не будет убит. Почему это случилось?
1 ответ
Решение
Активность не является процессом вашего приложения. Обычно деятельность уничтожается без уничтожения ее контейнера процесса. Таким образом, ваше состояние глобального процесса останется. Вы должны реагировать на события жизненного цикла активности для очистки по мере необходимости.