2013-04-14 135 views
0

使用NDK近一年后,我意识到Android中的流程生命周期与活动生命周期不同。Android活动生命周期与流程生命周期

更具体地说,我的本机库被加载到OnCreate中,但是在onDestroy中它没有被卸载(我甚至不知道你是否可以在这里卸载本地库),但是在下一个OnCreate中,它仍然是一样的进程,所以来自我的本地库的所有全局变量仍然保持其状态。对于Java中的静态变量也是如此。

这对于Android 2.3来说相当不错,但我最近进入了Android 4.2.2,并且发现了一些非常奇怪的东西。现在有可能让这个进程死掉,并且这个活动只是调用RESTart()(或者我从阅读日志中得到的结果),这种说法很古怪,因为我认为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

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

如果您有超过1 Activity,则只会创建当前可见,并且如果您在第一个Activity中加载lib,则此时不会加载它。

+0

是的,同意但从AboutActivity转到MainActivity时实际崩溃。 AboutActivity只显示一些文本,它不会与本地lib交互。有时我会在MainActivity中将其打开,在那里我加载库,当我恢复到它时,它会崩溃,我按下ok,奇怪的是它再次启动应用程序,这次使用onCreate&stuff。通常当应用程序崩溃时,它不会像那样重新启动。 – RelativeGames