CountDownTimer не позволит мне позвонить на Дестрой - PullRequest
2 голосов
/ 18 декабря 2011

Я сделал и простое приложение таймера обратного отсчета, но когда я пытаюсь сделать onDestroy, чтобы отменить таймер обратного отсчета, я получаю и ошибку.Мой кодовый блок 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)

Любая помощь приветствуется

Ответы [ 2 ]

1 голос
/ 18 декабря 2011

Ответ заключается в следующем понятии onDestroy () действия:

  • onDestroy () вызывается автоматически DVM.После этого действие будет удалено из стека.

Теперь ваш код для countdowntimer.cancel записывается после super (), поэтому действие (вместе с объектом countdowntimer) удаляется изпамяти до вашего countdowntimer.cancel.

Поэтому простое перемещение вашего super.onDestroy () в конце метода onDestroy () поможет избежать сбоя приложения.

0 голосов
/ 19 декабря 2011

Лучшим решением будет сохранить текущее время и остановить таймер в onPause, затем перезапустить таймер в onResume, добавив к нему сохраненное время.[для состояния паузы] Чтобы убедиться, что при запуске приложения таймер запускается с самого начала, просто присвойте сохраненную переменную времени 0 в onStop () [для случая запуска]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...