У меня есть фрагмент, в котором таймер запускается сразу после инициализации, и он отображает другое изображение каждые 6 секунд.Остановить таймер фрагмента onCloseActivity
Я не до конца понял, как работает этот таймер вещь, но почему-то я получил это работает, и я понимаю, пробеги таймера в другом потоке ... даже не уверен, что именно это означает, что:)
Но таймер вызывает сбой при загрузке другого фрагмента. так что я думаю, мне нужно ОТМЕНА таймера, когда активность закрыта?
Это подводит меня к двум вопросам. 1) Могу ли я запустить myTimer.cancel из любого места? если да, то как я запускаю его из своей основной деятельности или из других фрагментов.
2) есть что-то вроде onCloseActivity, которое я могу использовать для этого фрагмента. поэтому я могу отменить свой таймер, как только я оставлю фрагмент?
это, как я начинаю свой таймер:
// Таймер Таймер MyTimer;
/////////////////////
/////// timer ///////
/////////////////////
private void runTimer() {
myTimer = new Timer();
myTimer.schedule(new TimerTask() {
@Override
public void run() {
TimerMethod();
}
}, 5000, 5000);
}
private Runnable Timer_Tick = new Runnable() {
public void run() {
// next image if THIS one is loaded
nextImage();
}
};
private void TimerMethod() {
getActivity().runOnUiThread(Timer_Tick);
}
А вот моя ошибка:. getActivity() runOnUiThread (Timer_Tick); вызывает ошибку при загрузке другого фрагмента.
E/AndroidRuntime: FATAL EXCEPTION: Timer-1 Process: com.murmurcalgary.murmurcalgaryevolvd, PID: 8668 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.runOnUiThread(java.lang.Runnable)' on a null object reference at com.murmurcalgary.murmurevolvd.fragments.EventsFragment.TimerMethod(EventsFragment.java:92) at com.murmurcalgary.murmurevolvd.fragments.EventsFragment.access$000(EventsFragment.java:45) at com.murmurcalgary.murmurevolvd.fragments.EventsFragment$1.run(EventsFragment.java:77) at java.util.Timer$TimerImpl.run(Timer.java:284)
"EventsFragment.java:92" Что такое линия 92 событийFragment.java? –
Ответ Санджейта верен. Вы также можете проверить, является ли текущий контекст NULL или нет, прежде чем вызывать метод nextImage(). Я думаю, вы можете использовать if (getApplicationContext()! = Null) для этой цели. –