繁体   English   中英

按下后退按钮后未调用OnDestroy

[英]OnDestroy is not being called after the back button is press

我正在尝试整理活动代码。 创建函数被调用,但是当按下后退按钮时,我设置的刹车点永远不会消失

码:

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();
   }

您的onDestroy应该定义为

protected void onDestroy() { ... }

并不是

void OnDestroy() { ... }

Java是区分大小写的语言。

我不惊讶。 当您按下返回按钮时,不会自动调用onDestroy() 通常, 仅在系统资源不足且需要回收一些内存时才调用它。 您应该查看onPauseonStop

为了使onDestroy的调用时间更清楚,请查看android生命周期文档 如果某个活动被部分隐藏,则暂停该活动;如果该活动被完全隐藏,则停止活动,例如,按返回按钮。 onStop可以演变为对onDestroy的调用,但不一定要这样做。

这是因为onDestroy按下后退按钮时,不一定叫,只有当活动是由Android的破坏,它仍然不能保证进入onDestroy 更好的选择是将清理代码放在onStop()

此外,你并不真正需要的@Override ,但你确实需要super.onDestroy(); 为了使其表现为生命周期事件。

你有这个

public class cPuzzle extends cBase {

您的课程不会扩展活动。

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

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

protected void onDestroy ()

在销毁活动之前执行任何最后的清理。

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

当用户按下“ Back buttoncurrent activity从堆栈顶部弹出(该活动被destroyed ),并且上previous activity resumes (恢复其UI的先前状态)。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM