2011-12-18 25 views
2

我已经做了简单的倒计时计时器应用程序,但是当我尝试使onDestroy取消倒数计时器我得到和错误。 我的onDestroy代码块:CountDownTimer不会让我打电话onDestroy

@Override 
    public void onDestroy() 
    { 
    super.onDestroy(); 
    countdowntimer.cancel(); 
    } 

而且logcat的错误

12-18 19:16:06.383: E/AndroidRuntime(25512): FATAL EXCEPTION: main 
12-18 19:16:06.383: E/AndroidRuntime(25512): java.lang.RuntimeException: Unable to destroy  activity {com.android.SquirellMusic/com.android.SquirellMusic.SquirellMusicActivity}: java.lang.NullPointerException 
12-18 19:16:06.383: E/AndroidRuntime(25512): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3106) 
12-18 19:16:06.383: E/AndroidRuntime(25512): at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3171) 
12-18 19:16:06.383: E/AndroidRuntime(25512): at android.app.ActivityThread.access$2100(ActivityThread.java:132) 
12-18 19:16:06.383: E/AndroidRuntime(25512): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1071) 
12-18 19:16:06.383: E/AndroidRuntime(25512): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-18 19:16:06.383: E/AndroidRuntime(25512): at  android.os.Looper.loop(Looper.java:150) 
12-18 19:16:06.383: E/AndroidRuntime(25512): at android.app.ActivityThread.main(ActivityThread.java:4293) 
12-18 19:16:06.383: E/AndroidRuntime(25512): at java.lang.reflect.Method.invokeNative(Native Method) 
12-18 19:16:06.383: E/AndroidRuntime(25512): at java.lang.reflect.Method.invoke(Method.java:507) 
12-18 19:16:06.383: E/AndroidRuntime(25512): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849) 
12-18 19:16:06.383: E/AndroidRuntime(25512): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607) 
12-18 19:16:06.383: E/AndroidRuntime(25512): at dalvik.system.NativeStart.main(Native Method) 
12-18 19:16:06.383: E/AndroidRuntime(25512): Caused by: java.lang.NullPointerException 
12-18 19:16:06.383: E/AndroidRuntime(25512): at com.android.SquirellMusic.SquirellMusicActivity.onDestroy(SquirellMusicActivity.java:364) 
12-18 19:16:06.383: E/AndroidRuntime(25512): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3088) 

任何帮助表示赞赏

回答

1

答案在于)活动的onDestroy以下概念(:

  • onDestroy()由DVM自动调用。之后,活动 将从堆栈中移除。

现在,您的countdowntimer.cancel代码将写入super()之后,因此您的countdowntimer.cancel之前的活动(与您的countdowntimer对象一起)将从内存中移除。

所以,只需在onDestroy()方法的末尾移动super.onDestroy()就可以避免应用程序崩溃。

+0

我试过了,仍然得到了同样的错误。应用程序退出时是否还有其他可能取消倒数计时器? – v66dik 2011-12-18 19:34:12

0

最好的解决方案是保存当前的时间并在onPause中停止定时器,然后在onResume中重新启动定时器,并为其添加保存的时间。 [为暂停状态] 为了确保在启动应用程序计时器开始从开始,只分配保存的时间变量0 onStop()[开始案例]

+0

我有点困惑,你能写一个例子吗? – v66dik 2011-12-19 18:51:51

相关问题