2016-11-22 9 views
0

私は既にここで質問を見ています:Android Runnable runs faster after Resume しかし、私の問題は解決しません。 5秒ごとにイメージを変更するフラグメント内に実行可能ファイルがあります。私が最初にフラグメントに移動するとき、それはアクティビティの最初のフラグメントです。それは問題ありません。イメージは5秒ごとに変わります。 しかし、別の断片に移動して戻ってくると、実行可能ファイルがより速く実行されるため、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は、動作していないようです: はここに私のコードです。 何か助けていただければ幸いです。おかげさまで

答えて

2

Timerが停止していない可能性があります。 onPost方法のTimerをキャンセルしてください。

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 was cancelled'です。 – user3079872

+0

私はそれをあなたの提案と一緒に使い、OnResumeのタイマーをリセットしました。どうもありがとう! – user3079872

関連する問題