2012-02-23 54 views
4

我似乎有问题与我遇到的主题上的其他帖子相反。其他人发现,onDestroy()并不总是被称为,但我发现它总是并立即是。意图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。

任何想法,我可能做错了什么?

回答

8

关键实际上挑起你的活动finish()方法,它使您的活动是paused-> stopped->破坏

所以在技术上如预期这种行为是功能性的。

+0

其他[posts](http://stackoverflow.com/questions/4778754/kill-activity-on-back-button)似乎有争议,其他人已经使用额外的代码来调用onPause()完成以确保他们的活动被破坏了。无论如何,我发现即使家庭活动被调用,也会调用onDestroyed(),我相信这对应于生命周期图中的“另一个活动进入前台”http://developer.android.com/images/activity_lifecycle.png – dhewett 2012-02-23 18:37:00

+1

不,这就是活动周期实际工作的方式。如果按** Home **键,则onDestroy可能不会被调用(取决于手机是否在低内存上运行),但onStop会。如果你按**返回**键,然后onDestroy被调用。我认为你应该创建一个测试应用程序,并在每个事件上留下一个活动和日志消息,以便深入观察 – waqaslam 2012-02-23 21:27:03

+0

感谢您帮助清除Waqas,你的确是对的。 android文档中的措辞让我认为应该只在内存不足的情况下调用onDestroyed(),但应该在Back键按下时调用它。 [这](http://qwapp.blogspot.com/2011/01/android-app-life-cycle-and-home-and.html)博客文章解释它。 – dhewett 2012-02-24 05:34:56