Android活动生命周期与流程生命周期

时间:2013-04-14 19:37:02

标签: android android-4.2-jelly-bean

使用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到先被称为。)

1 个答案:

答案 0 :(得分:1)

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

如果您有多个Activity,则只会创建当前可见的内容,如果您在第一个Activity中加载了lib,则此时不会加载它。