Android 片段中的Runnable在恢复后运行得更快

Android 片段中的Runnable在恢复后运行得更快,android,android-fragments,runnable,timertask,Android,Android Fragments,Runnable,Timertask,我已经看了这里的问题: 但这并不能解决我的问题。 我在一个片段中有一个runnable,它每5秒更改一次图像。当我第一次移动到片段时,它是活动中的第一个片段,很好:图像每5秒更改一次。 但是,如果我移动到另一个片段并返回,runnable运行得更快,因此一些图像每2秒更改一次。 我已经试过了关于这个话题的所有问题,但是我仍然不能正确回答,所以我非常感谢你的帮助。 这是我的密码: public class Home_Fragment extends Fragment implements Radi

我已经看了这里的问题: 但这并不能解决我的问题。 我在一个片段中有一个runnable,它每5秒更改一次图像。当我第一次移动到片段时,它是活动中的第一个片段,很好:图像每5秒更改一次。 但是,如果我移动到另一个片段并返回,runnable运行得更快,因此一些图像每2秒更改一次。 我已经试过了关于这个话题的所有问题,但是我仍然不能正确回答,所以我非常感谢你的帮助。 这是我的密码:

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似乎不起作用,当用户离开此片段时,仍有对runnable的调用。 非常感谢您的帮助。
谢谢

这可能是因为
计时器未停止。取消
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();
  }
} 

这可能是因为
计时器未停止。取消
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();
  }
} 

非常感谢。如果我这样做,我已经尝试过了,当它返回时崩溃,因为计时器已被取消,无法启动。我取消计时器时得到的错误是“java.lang.IllegalStateException:timer was cancelled”,我让它按照您的建议工作,然后在OnResume中重置计时器。谢谢!非常感谢。如果我这样做,我已经尝试过了,当它返回时崩溃,因为计时器已被取消,无法启动。我取消计时器时得到的错误是“java.lang.IllegalStateException:timer was cancelled”,我让它按照您的建议工作,然后在OnResume中重置计时器。谢谢!