마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

TimerTask가 겹쳐서 실행되는 문제

0 추천
TimerTask myTask = new TimerTask(){
    @Override
    public void run(){
         new BackgroundTask().execute();
    }
});

protected void onResume() {  
    this.overridePendingTransition(0, 0);
    super.onResume();

    Timer timer = new Timer(true);
    timer.schedule(myTask, 10, 10000);
}

메인 액티비티에 이런 식의 소스가 들어가있는데요.

그냥 계속 놔두면 의도에 맞게 10초마다 한번씩 잘 실행됩니다.

그런데 다른 액티비티에 갔다가 다시 오면

기존 TimerTask + 새 TimerTask가 같이 실행되어버리고

한번더 다른 액티비티에 갔다가 돌아오면

기존 TimerTask + 좀전 새 TimerTask + 새 TimerTask가 실행되어 버리네요;

메인 액티비티를 여러번 재방문해도 TimerTask가 겹쳐서 실행되는걸 막으려면

어떻게 하면 될까요?

개님의습성 (2,500 포인트) 님이 2013년 7월 4일 질문

2개의 답변

0 추천
안녕하세요^_^

간단하게 boolean 값으로 true / false 를 주어서,

조건문에 해당될때만 실행하면 되겠네요!

예를 들어 onCreate 될때는 true 일때 실행하고,

onResume 일때는 false 일때 실행하고,

onDestroy 될때는 다시 true 값으로 돌려주면 될 듯합니다.

도움이 되셨으면 좋겠네요!
안드로메다개발자 (8,830 포인트) 님이 2013년 7월 4일 답변
0 추천
코드를 다 쓰기는 그렇고

if(timer !=null){

timer.cancle()

timer = null;

}

timer = new Timer();

..

...

 

이러면 기존에 돌던 타이머는 정지하고, 새로운 타이머가 시작 될거에요
ezmo01 (1,510 포인트) 님이 2013년 7월 4일 답변
기존 timer는 어떻게 구별하나요?
안좋지만 유혹적인 방법은 전역변수를 쓰는 것이겠죠?
...