【问题标题】:Android Activity Lifecycle versus Process LifecycleAndroid Activity 生命周期与进程生命周期
【发布时间】:2013-04-06 20:58:36
【问题描述】:

在使用 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 能够首先被调用)。

【问题讨论】:

    标签: android android-4.2-jelly-bean


    【解决方案1】:

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

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

    【讨论】:

    • 是的,同意,但从 AboutActivity 转到 MainActivity 时它实际上崩溃了。 AboutActivity 只显示一些文本,它不与本机库交互。有时我在 MainActivity 中将它打开,在那里我确实加载了库,当我恢复到它时,它崩溃了,我按下确定,奇怪的是它再次启动应用程序,这次是 onCreate & stuff。通常当应用程序崩溃时,它不会像那样重新启动。
    猜你喜欢
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    相关资源
    最近更新 更多