После почти года использования NDK я понял, что жизненный цикл Process в Android отличается от жизненного цикла Activity.
Точнее моя родная библиотека грузится в OnCreate но в onDestroy не выгружается (даже не знаю можно ли тут выгрузить нативную библиотеку), но при следующем OnCreate это все тот же процесс, так что все глобальные переменные из моей родной библиотеки все еще живы с сохраненным состоянием. То же самое и для статических переменных в Java.
Это было довольно хорошо с Android 2.3, но недавно я перешел на Android 4.2.2 и заметил кое-что действительно странное. Теперь можно убить процесс, а активность просто вызвать onRestart() (или это то, что я предполагаю из чтения журналов), что, если честно, довольно странно, потому что я предполагаю, что onCreate будет вызываться сразу после того, как процесс создан, но он держит другую вкладку, потому что он думает о «действиях», а не об процессах. Таким образом, в основном, если я приостанавливаю одно из своих приложений на очень долгое время (скажем, 1+ часов) и возвращаюсь к нему, это обычно приводит к сбою.
Выдержка из журнала устройства:
04-14 04:41:34.886 2376 2376 I am_on_paused_called: [0,com.re3.benchmark.AboutActivity]
04-14 05:06:26.128 386 594 I am_proc_died: [0,2376,com.re3.benchmark]
04-14 13:19:44.256 386 538 I am_proc_start:[0,4761,10062,com.re3.benchmark,activity,com.re3.benchmark/.AboutActivity]
04-14 13:19:44.295 386 595 I am_proc_bound: [0,4761,com.re3.benchmark]
04-14 13:19:44.397 386 595 I configuration_changed: 5248
04-14 13:19:44.459 386 595 I am_restart_activity: [0,1115347592,8,com.re3.benchmark/.AboutActivity]
04-14 13:19:44.701 4761 4761 I am_on_resume_called: [0,com.re3.benchmark.AboutActivity]
04-14 13:19:44.881 386 401 I am_activity_launch_time: [0,1115347592,com.re3.benchmark/.AboutActivity,631,631]
04-14 13:19:52.725 386 595 I am_crash: [4761,0,com.re3.benchmark,8961606,java.lang.NullPointerException,NULL,REFramework.java,330]
04-14 13:19:52.725 386 595 I am_finish_activity: [0,1115347592,8,com.re3.benchmark/.AboutActivity,crashed]
04-14 13:19:52.772 386 595 I am_pause_activity: [0,1115347592,com.re3.benchmark/.AboutActivity]
PS: я понимаю, что сбой происходит в моем коде, но мой код на самом деле не обрабатывает onRestart как первую функцию, которая будет вызываться во всем процессе (например, она обходит инициализации моей родной библиотеки, так как я ожидаю, что onCreate будет вызываться первым ).