2016-11-22 11 views
0

У меня уже был вопрос: 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 работает, когда пользователь отходит от этого фрагмента все еще вызывает к работоспособной. Любая помощь очень ценится. Спасибо.

ответ

2

Это может быть причина, по которой Timer не остановлен. Отмена Timer в методе onPost:

public void onPause(){ 
    super.onPause(); 

    if (wowHandler != null){ 
     System.out.println("I am on the onPause, removing calls "+wowHandler); 
     wowHandler.removeCallbacksAndMessages(wowUpdateResults); 
    } 

    if(wowTimer != null){ 
    wowTimer.cancel(); 
    } 
} 
+0

спасибо. Если я сделаю это, что я попробовал, он сработает, когда он вернется, когда таймер был отменен, и он не может быть запущен. – user3079872

+0

ошибка, которую я получаю, когда я отменяю таймер: «java.lang.IllegalStateException: Timer был отменен» – user3079872

+0

Я получил его для работы с вашим предложением, а затем сбросил таймер в OnResume. Большое спасибо! – user3079872

 Смежные вопросы

  • Нет связанных вопросов^_^