2017-05-05 3 views
-2

아래 예제에서 handler.postDelayed를 중지 할 수 없습니다. 그것은 단순히 일초 후 기능을 계속하고 스위치가 꺼져있을 때 멈추지 않는다 :Android : Handler.postDelayed가 중지되지 않음

mySwitch.setChecked(false); 
    mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      final Handler handler = new Handler(); 

      final Runnable r = new Runnable() { 
       public void run() { 
        myClient.SendData("AA"); 
        handler.postDelayed(this, 1000); 
       } 
      }; 
      if (isChecked){ 
       handler.postDelayed(r, 1000); 
      } 
      else { 
       handler.removeCallbacks(r); 
      } 
     } 
    }); 

답변

2

및 스위치가 꺼져있을 때 멈추지 않는다 : 당신이 인스턴스화되기 때문이다

r 콜백이 호출 될 때마다. 이동

final Runnable r = new Runnable() { 
     public void run() { 
      myClient.SendData("AA"); 
      handler.postDelayed(this, 1000); 
     } 
    }; 

콜백 외부로 이동하십시오. 귀하의 방법 또는 클래스의 범위에

관련 문제