我正在尝试将清理代码放在我的活动上。调用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();
}
答案 0 :(得分:3)
您的onDestroy
应定义为
protected void onDestroy() { ... }
而不是
void OnDestroy() { ... }
Java是区分大小写的语言。
答案 1 :(得分:2)
我并不感到惊讶。按后退按钮时,不会自动调用onDestroy()
。通常它是only called when the system is low on resources并且需要回收一些内存。您应该改为onPause
或onStop
。
为了更清楚地了解调用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