2011-12-18 48 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

相關問題