2016-08-31 31 views
0

removeCallbacksを使用してRunnableを停止しようとしていますが、何とか停止しません。 - ここに私の変数removeCallbacks()後にAndroid Runnableが停止しない

private int mInterval = 2000; // 2 seconds by default, can be changed later 
private Handler mHandler = new Handler(); 

Runnable mStatusChecker = new Runnable() { 
    @Override 
    public void run() { 
     try { 

       checkPayNow(); 

     } finally { 
      // 100% guarantee that this always happens, even if 
      // your update method throws an exception 
      mHandler.postDelayed(mStatusChecker, mInterval); 
     } 
    } 
}; 

と私はそれが私はあなたがやろうとすることができる

public void checkPayNow(){ 

    if (!url.isEmpty()){ 

     //url now has text 

     mHandler.removeCallbacks(mStatusChecker); 
    }else { 
     //no text yet 
    } 


} 
+0

ここで、初めてcheckPayNowを呼び出していますか? –

+0

ボタンでRunnableを呼び出すクリック –

+1

'checkPayNow()'でキャンセルしても、あなたのハンドラで 'finally'ブロックを使って' postDelayed() 'を呼び出しているのでエラーが出ますそれはあなたのコメントでも指摘しています)。 – Shaishav

答えて

1
boolean stoped = false; 

Runnable mStatusChecker = new Runnable() { 
    @Override 
    public void run() { 
     try {  
      checkPayNow(); 
     } finally { 
      if(!stoped) 
      mHandler.postDelayed(mStatusChecker, mInterval); 
     } 
    } 
}; 

stoped = trueを停止したい場合。

checkPayNow()からハンドラを削除してください。

public void checkPayNow(){ 

    if (!url.isEmpty()){ 
     //url now has text 
     //mHandler.removeCallbacks(mStatusChecker); 
    }else { 
     //no text yet 
    } 
} 
0

を停止し、その後、私に特定の値を与えるそれまでは実行しています方法私の実行可能ですそれはremoveCallbacksなしこのように:

Runnable mStatusChecker = new Runnable() { 
    @Override 
    public void run() { 
     if(!checkPayNow()) { 
//if not ready so far, then check in some delay again 
      mHandler.postDelayed(mStatusChecker, mInterval); 
     } 
    } 
}; 

public boolean checkPayNow(){ 

    return !url.isEmpty(); 


} 
関連する問題