[英]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()
。 通常, 仅在系统资源不足且需要回收一些内存时才调用它。 您应该查看onPause
或onStop
。
为了使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 button
, current 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.