У меня уже был вопрос: Android Runnable runs faster after Resume , но это не решает мою проблему. У меня есть runnable в фрагменте, который меняет изображение каждые 5 секунд. Когда я сначала перехожу к фрагменту, это первый фрагмент в действии, это нормально: изображения меняются каждые 5 секунд. Однако, если я перейду к другому фрагменту и вернусь, runnable работает быстрее, поэтому некоторые изображения меняются каждые 2 секунды. Я пробовал все вопросы, которые я мог найти по этой теме, и все же я не в состоянии сделать это правильно, поэтому помощь будет очень оценена. Вот мой код:Runnable in Fragment работает быстрее после Resume
public class Home_Fragment extends Fragment implements RadioGroup.OnCheckedChangeListener {
Runnable wowUpdateResults;
Handler wowHandler = new Handler();
int wowdelay =0 ;
int wowperiod = 5000;
Timer wowtimer = new Timer();
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.wow_layout, container, false);
....
wowUpdateResults = new Runnable() {
public void run() {
WowAnimateandSlideShow();
}
};
wowtimer.scheduleAtFixedRate(new TimerTask() {
public void run() {
System.out.println("I am on scheduled at fixed rate");
wowHandler.post(wowUpdateResults);
}
}, wowdelay, wowperiod);
return view;
}// end of onCreateView
private void WowAnimateandSlideShow() {
... //code to get the right image to be shown
Animation rotateimage2 = AnimationUtils.loadAnimation(getActivity().getBaseContext(), R.anim.fade_in);
wowprayer.startAnimation(rotateimage2);
}
public void onPause(){
super.onPause();
if (wowHandler != null){
System.out.println("I am on the onPause, removing calls "+wowHandler);
wowHandler.removeCallbacksAndMessages(wowUpdateResults);
}
}
public void onResume(){
super.onResume();
wowHandler.postDelayed(wowUpdateResults, 5000); // from the above mentioned question
}
Кроме того, не кажется, что removeCallbacksAndMessages работает, когда пользователь отходит от этого фрагмента все еще вызывает к работоспособной. Любая помощь очень ценится. Спасибо.
спасибо. Если я сделаю это, что я попробовал, он сработает, когда он вернется, когда таймер был отменен, и он не может быть запущен. – user3079872
ошибка, которую я получаю, когда я отменяю таймер: «java.lang.IllegalStateException: Timer был отменен» – user3079872
Я получил его для работы с вашим предложением, а затем сбросил таймер в OnResume. Большое спасибо! – user3079872