按下后退按钮后未调用OnDestroy

时间:2013-06-20 18:56:10

标签: android

我正在尝试将清理代码放在我的活动上。调用create函数,但是当按下后退按钮时,我设置ondestroy的制动器将永远不会出现

代码:

public class cPuzzle extends cBase {
cPuzzleView MyView;

 public void onCreate(Bundle savedInstanceState)  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    try {
        MyView =new cPuzzleView(this, this, cGlobals.PuzleId);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
        setContentView(MyView);

        StartTimer(20);


}

 void OnDestroy()
   {
       StopTimer();
       MyView.OnDestroy();
   }

5 个答案:

答案 0 :(得分:3)

您的onDestroy应定义为

protected void onDestroy() { ... }

而不是

void OnDestroy() { ... }

Java是区分大小写的语言。

答案 1 :(得分:2)

我并不感到惊讶。按后退按钮时,不会自动调用onDestroy()。通常它是only called when the system is low on resources并且需要回收一些内存。您应该改为onPauseonStop

为了更清楚地了解调用onDestroy的时间,请查看android lifecycle docs。如果活动部分隐藏,则活动暂停,如果活动被完全隐藏,则停止活动。你按下后退按钮。 onStop可以演变为对onDestroy的调用,但不一定会这样做。

答案 2 :(得分:1)

这是因为当按下后退按钮时,onDestroy不一定被调用,只有当活动被Android销毁并且仍然无法保证进入onDestroy时。更好的选择是将清理代码放在onStop()

此外,您并不真正需要@Override,但您需要super.onDestroy();才能使其成为生命周期事件。

答案 3 :(得分:0)

你有这个

public class cPuzzle extends cBase {

您的课程不会延长活动。

http://developer.android.com/reference/android/app/Activity.html#onDestroy()

onDestory()是一种活动生命周期方法。

protected void onDestroy ()

在活动被销毁之前执行任何最终清理。

注意:不要指望此方法被称为保存数据的地方!例如,如果某个活动正在内容提供程序中编辑数据,那么这些编辑应该在onPause()或onSaveInstanceState(Bundle)中提交,而不是在此处。

当用户按下Back button时,current activity会从堆栈顶部(活动为destroyed)和previous activity resumes(之前的状态其UI已恢复)。

http://developer.android.com/guide/components/tasks-and-back-stack.html

如果您希望清理,请在onPause中进行清理。

答案 4 :(得分:-1)

按下后,您的活动暂停,然后停止。让我们在此处查看活动生命周期:http://developer.android.com/reference/android/app/Activity.html