0

我正在尝试将清理代码放在我的活动中。创建函数被调用,但是当按下后退按钮时,我设置 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();
   }
4

5 回答 5

3

onDestroy应该被定义为

protected void onDestroy() { ... }

并不是

void OnDestroy() { ... }

Java 是区分大小写的语言。

于 2013-06-20T21:56:45.830 回答
2

我不惊讶。onDestroy()按下后退按钮时不会自动调用。一般只有在系统资源不足且需要回收一些内存时才会调用它。你应该看onPauseonStop取而代之。

为了更清楚地了解何时onDestroy调用,请查看android 生命周期文档。如果活动部分隐藏,则暂停,如果完全隐藏,则停止,例如您按下后退按钮。onStop可以演变成呼吁onDestroy但不一定这样做。

于 2013-06-20T19:00:23.473 回答
1

那是因为onDestroy在按下返回键的时候不一定会调用,只有当activity被Android销毁并且仍然不能保证进入时才会调用onDestroy。更好的选择是将清理代码放在您的onStop().

此外,您实际上并不需要,@Override但您确实需要super.onDestroy();它才能使其表现为生命周期事件。

于 2013-06-20T18:59:00.253 回答
0

你有这个

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.

于 2013-06-20T19:24:54.097 回答
-1

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

于 2013-06-20T19:01:23.347 回答