【问题标题】:Intent onDestroy() always being called with back buttonIntent onDestroy() 总是被后退按钮调用
【发布时间】:2012-02-23 08:27:36
【问题描述】:

我似乎遇到了与我遇到的有关该主题的所有其他帖子相反的问题。其他人发现 onDestroy() 并不总是被调用,但我发现它总是并且立即被调用。

我正在检查它是否被以下调用:

@Override
protected void onDestroy() {
    super.onDestroy();
    Log.d(TAG, "onDestroy");
}

在单击返回或使用我的操作栏按钮后立即触发此日志代码,该按钮仅将主页活动称为意图。

我环顾四周,但每个人都说生命周期应该是这样的:http://developer.android.com/images/activity_lifecycle.png

此行为不限于单个应用程序;我尝试下载一些示例代码并添加上面的调试代码只是为了找到相同的行为。它也不限于单个android版本;我在模拟器上试过 2.1 和 2.3,在物理设备上也试过 4.0.2。

有什么想法我可能做错了吗?

【问题讨论】:

    标签: android


    【解决方案1】:

    back 键实际上会在您的活动上引发 finish() 方法,并导致您的活动paused->stopped->destroyed

    所以从技术上讲,这种行为符合预期。

    【讨论】:

    • 其他posts 似乎对此提出异议,其他人使用额外的代码在 onPause() 中调用完成以确保他们的活动被破坏。无论如何,我发现即使调用 home Activity 也会调用 onDestroyed(),我相信这对应于生命周期图中的“另一个活动进入前台”developer.android.com/images/activity_lifecycle.png
    • 不,这就是活动谎言周期的实际运作方式。如果您按 Home 键,则可能不会调用 onDestroy(取决于手机是否在低内存上运行),但 onStop 会。如果您按 Back 键,则会调用 onDestroy。我认为您应该创建一个带有活动的测试应用程序并在每个 on-event 上记录消息以深入观察
    • 感谢您帮助清除 Waqas,您确实是正确的。 android 文档中的措辞让我认为 onDestroyed() 应该只在内存不足的情况下调用,但它应该在返回键按下时调用。 This 博文对此进行了解释。
    • 你好@waqaslam。 onDestroy() 不会阻止应用程序在后台运行吗?因为如果确实如此,那么在调用 onDetroy() 之后,我仍然会在“正在运行的应用程序”列表中看到我的应用程序。
    • @Jaikrat 'onDestroy' 只保证Activity 优雅地完成。它不会破坏应用程序上下文,这就是应用程序出现在正在运行的应用程序中的原因。当系统认为需要释放资源时,应用程序上下文会被系统本身销毁(除非用户强制停止)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    相关资源
    最近更新 更多