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

안드로이드 프로그레스바 스레드 타이머 질문

0 추천
안녕하세요 개발자님들.

우선 제가 구현하고자 하는 것은 퀴즈 문제 어플인데

지금 구현단계가 어느정도이면 AsynTask로 xml을 파싱해와서 문제를 읽어오고 정답맞추는것과 다음문제로 넘어가고 이게 다음문제를 넘어갈때 다음 버튼을 누르면 인텐트를 이용하여 MainActivit -> NextActivity -> NextActivity -> ... -> NextActivit 이런식으로 넘어갑니다.문제번호는 sqlite를 이용한 db를 활용하여 다음 문제로 넘어갑니다.

근데 문제는 쓰레드로 구현한 프로그레스바 입니다. 쓰레드로 구현하면서 타이머 max를 15초로 잡고 15초가 지나면 끝나는 액티비티로 인텐트하는 형식으로 했습니다.

근데 쓰레드가 문제입니다. 여기에 여러번 질문을 올리긴하였지만 해결점을 찾아 여러번 수정을 해봐도 오류는 같았습니다.

어떤 오류냐면, 문제를 풀다가 15초에서 한 10초정도즘에 문제르 풀고 다음 버튼을 누르면, 우선 다음문제로 넘어가고 다음문제의 타이머 프로그레스바가 진행이 됩니다. 근데 이때, 이전의 문제에서 15초일때 끝나는 액티비티로 인텐트 해놓은걸 갑자기 실행이 되버리고 중첩이 되버립니다. 이것을 막기 위해, inturrpt 함수와 is inturrpted 함수 그리고 flag를 놓고 하는 갖가지 노력을 해보았는데 되지않았습니다 .

혹시 해결법을 이상황에서 찾을 수 있을지 질문올려봅니다.
SuperPro (860 포인트) 님이 2014년 11월 6일 질문

1개의 답변

0 추천

굳이 쓰레드를 쓰지말고

핸들러하나만들고 postDelayed 반복 호출로 하는게 좋을 것 같네요

 

int time = 0;

boolean solved = false;

public void run(){
  if(solved){
    //풀면 정지
    return;
  }

  time++;
  
  if(time < 15){

     //프로그레스바 갱신
     progressBar.setProgress(time);

     //1초후 다시 호출
     handler.postDelayed(this, 1000);

  }else{

    //시간초과시 처리    

  }
}

 

대충 이런구조로 하면 되지 않을까 싶네요

alkyne (22,960 포인트) 님이 2014년 11월 6일 답변
정말 감사합니다... 해결되었습니다
...