【问题标题】:OnPause() not called when relaunch activity in emulator在模拟器中重新启动活动时未调用 OnPause()
【发布时间】:2012-05-26 19:15:17
【问题描述】:

我选择将OnPause() 方法中的持久应用程序状态保存到我的数据库,因为根据the documentation of the activity life cycle 保证在应用程序被终止之前调用OnPause()

现在我使用 eclipse 和 avd 模拟器(api 级别 8)面临以下行为:
1. 我通过 Eclipse 启动我的应用程序 - Instance1
2. 我再次通过 Eclipse 启动我的应用程序 - Instance2

现在 Instance1 在没有调用 OnPause() 的情况下被终止!

有人可以解释一下为什么OnPause() 没有被调用吗?我认为它保证总是被调用。如果不是这种情况,可能是因为 eclipse 终止 Instance1 进程的方式,那么我想知道我是否可以改变它。非常感谢。

【问题讨论】:

    标签: android android-emulator activity-lifecycle


    【解决方案1】:

    当您通过 eclipse 启动应用程序时,它会有效地从设备或模拟器上已经运行的同一应用程序的任何实例中撕下地毯。这在实践中永远不会发生,只有在 eclipse 中运行时才会发生。

    所以你可以计划 onPause() 总是被调用。

    【讨论】:

    • 感谢您的评论。您让我确信我可以始终在设备上依赖 onPause。无论如何,我想稍等一下接受你的回答,因为我希望有人知道我们如何让模拟器像设备一样运行。
    • 应用程序在模拟器上的行为与在设备上的行为相同。如果您从 Eclipse 运行应用程序“com.ab”,并且“com.ab”已经在模拟器或真实设备上运行,则“com.ab”将在没有任何通知给应用程序的情况下被终止(就像电池从设备中拔出或在模拟器运行时拔出电源插头)。但是,如果应用程序在正常运行期间关闭,则会调用 onPause()。
    【解决方案2】:

    您的意思是通过 Eclipse 启动应用程序 - 实例 1 和 2?

    当单击运行按钮时,模拟器(在您的情况下或真实设备中)会运行您的应用程序。请不要在其他 AVD 中运行它(如果我根据您的实例 1 和 2 正确运行)。如果您在 onCreate() 和 onPause() 方法中添加了日志代码,例如 Log.i(TAG, "I'm in onCreate()!");,您应该在 logcat 中看到它。因此,当您启动应用程序时,您将看到 onCreate 消息,例如,当您单击主页按钮时,您将看到 onPause() 消息。

    这是保证被调用的方式。

    【讨论】:

    • 我的意思是我在同一个模拟器上启动应用程序,然后在同一个模拟器上再次启动它,这会在不调用 onPause 的情况下杀死第一个实例。在问这里之前,我用日志消息进行了测试。没有出现 onPause 和 onStop 的日志消息,这表明在这种情况下未调用 onPause。我希望模拟器也尊重生命周期,但似乎并非如此。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 2019-02-27
    • 2016-12-14
    • 2017-06-18
    相关资源
    最近更新 更多