2013-01-10 3 views
6

onCreate에서 매분 반복되는 작업을 실행합니다. 여기 어떻게합니까 :timer.scheduleAtFixedRate가 취소를 호출 할 때 중지되지 않습니다.

myTimer = new Timer(); 
    int delay = 30000; // delay for 30 sec. 
    int period = 600000; // repeat every 60 sec. 
    doThis = new TimerTask() { 
     public void run() { 

        Log.v("TImer","repeated"); 
        wv.reload(); 

     } 
    }; 

    myTimer.scheduleAtFixedRate(doThis, delay, period); 

모든 코드는 onCreate에 있습니다. 따라서 앱이 화면에서 사라지면 타이머 스틸이 실행된다는 것을 logcat에서 볼 수 있으며 앱이 삭제되지 않으면 멈추지 않습니다. 그래서, 의 활동에서 나는 myTimer.cancel();라고 부른다. 그러나 그것은 도움이되지 않았다. 앱이 화면에 없더라도 logcat에서 업데이트를 볼 수 있습니다. 그래서, timerTask을 멈추는 방법?

답변

4

여기 내 파일에 넣은 코드가 있습니다. 지연 및 기간이 조정되어 있으므로 오래 기다릴 필요가 없습니다. 나는 앱을 돌린다. LogCat에서 메시지를 볼 수 있습니다. 내 갤럭시 S3의 홈 버튼을 누릅니다. 그런 다음 LogCat에서 메시지가 중지됩니다.

public class MainActivity extends Activity { 
Timer myTimer; 
TimerTask doThis; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    myTimer = new Timer(); 
    int delay = 0; // delay for 30 sec. 
    int period = 1000; // repeat every 60 sec. 
    doThis = new TimerTask() { 
     public void run() { 

        Log.v("TImer","repeated"); 

     } 
    }; 

    myTimer.scheduleAtFixedRate(doThis, delay, period); 
} 

@Override 
protected void onPause() { 
    myTimer.cancel(); 
    super.onPause(); 
} 

} 
+0

나는 onStop에서 그것을 puted했고 지금은 작동하지 않습니다. 이상한 이유는 작동하지 않습니다 ... – Daler

+0

Strange. Log.v는 onPause 메서드에 아무 것도 표시하지 않습니까? 그렇지 않다면 철자가 잘못되었을 수도 있고 아니면 P가 대문자가 아니거나 다른 장소에 있지 않은 것일 수도 있습니다. 따라서 실제로 호출되지 않습니다. –

+0

)) 정확하게 내 onPause가 잘못 선언되었습니다 ...) – Daler

0

스레드가 이미 전송되었으므로 마지막으로 실행될 수 있습니다. onLoad에서 변수를 true로 설정 한 다음 onPause에서 false로 설정합니다. 그런 다음 타이머 작업에서 변수가 true 인 경우에만 코드를 실행하십시오.

새로운 if 문 외부의 로그에 기록합니다. 마지막으로 한 번 실행하면 실제로 해결할 수 있습니다. 하지만 onPause 이후에도 여러 번 반복해서 실행하면 내 솔루션을 사용하지 마십시오.

+0

나는이 방법을 시도해도 작동하지 않습니다. 그리고 반복해서 반복되므로 .. – Daler

+0

wv.reload(); - 그 방법으로 무엇을하고 있는지 잘 모르겠습니다. 앱이 다시 시작될 수있는 것입니까? –

+0

또한 onPause 메서드에 Log.v를 넣어서 실제로 해고되는지 확인할 수 있습니까? –