0

在使用 NDK 将近一年之后,我开始意识到 Android 中的 Process 生命周期与 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 )。

4

1 回答 1

1

您可能应该加载本机库Application.onCreate而不是Activity.

如果您有多个 1 Activity,则仅创建当前可见的,并且如果您在 first 中加载 lib ,此时Activity您将不会加载它。

于 2013-04-14T20:01:04.530 回答