0

나는이 응용 프로그램과 함께 여기 안드로이드에 갇혀 있습니다. 내 응용 프로그램에서 특정 초 타이머를 보여주는 진행률 표시 줄 구현하려고합니다. 버튼을 클릭하면 타이머가 새로 고침되고 progressBar에서 0부터 다시 시작됩니다. 이를 위해 스레드를 사용하고 있습니다.android에서 각 onclick 후에 ProgressBar가 더 빠르게 실행됩니다.

문제는 버튼을 클릭 할 때 스레드가 타이머 기능을 호출하고 스레드가 점점 빨라지고 빨라질 때마다입니다. 나는 그것을 해결할 수 없었고 배경에 어떤 일이 일어나고 있는지 전혀 알지 못했습니다. 이 내가 RandomGeneration라는 다른 함수에서이 함수를 호출 Timerfunction

public void setTimer() 
    { 
     prog=0; 
     progress.setProgress(prog); 
     if(flag){ 
     t= new Thread(new Runnable(){ 
      public void run() 
      { 
       while(prog<100) 
       { 
       prog+=1; 
       handle.post(new Runnable(){ 
        public void run() 
        { 
         progress.setProgress(prog); 
         if(prog==progress.getMax()&& flag){ 
         call_fun(); 
         } 
        } 
       }); 
       try 
       { 
        Thread.sleep(time); 
       } 
       catch(InterruptedException e) 
       { 
        Log.i("Error", null); 
       } 
       } 
      } 
     }); 
     t.start(); 
     } 
    } 

내 코드입니다. 버튼을 클릭하면 임의 생성이 호출되고 설정된 타이머가 매번 활성화됩니다. 그러나 클릭 할 때마다 진행률 막대가 더 빨리 실행됩니다. 동일한 특정 시간에 지속적으로 실행됩니다. 예를 들어 첫 번째 클릭에서 3 초 동안 실행되면 두 번째 클릭에서 2 초가 걸리며 점점 빨라집니다.

누구든지이 코드에서 어떤 일이 일어나는지 찾을 수 있습니까? 미리 감사드립니다 .. !!

답변

0

단추를 클릭 할 때마다 새로운 스레드가 생성됩니다. t이 이미 실행 중인지 확인하고 진행 중이면 진행을 0으로 설정하는 논리를 업데이트 하시겠습니까? 또한 if(flag)의 기능은 무엇입니까?

+0

답장 보내 주셔서 감사합니다. 내 코드에서 함수가 호출 될 때마다 prog = 0을 설정한다는 것을 알 수 있습니다. 그리고 flag는 부울입니다.이 응용 프로그램은 답변이 맞으면 퀴즈와 비슷합니다. 플래그가 참이면 true입니다. 대답이 잘못된 경우 플래그는 거짓입니다. 특정 시간 동안 실행해야하는 타이머로서의이 퀴즈. 그리고 모든 정답마다 새로 고쳐 져야하며 새로운 질문이 표시됩니다. – Ashokprakash

+0

그렇다면 다음과 같이하면 좋을 것입니다 'if (t! = null) { return;}' 그리고'prog'을 휘발성으로 설정해야합니다 (아직하지 않았다면) –

+0

스레드 null이면 작업이 끝났습니다 !! 어디 전화해야합니까 (t! = null) .. 당신이 나를 onclick에서 이것을 부르라고 말하고 있습니까 ?? 그 전에 스레드가 매번 더 빠르게 실행되는 이유를 설명해 주시겠습니까 ?? – Ashokprakash

관련 문제