2013-04-02 2 views
1

// 카운터 응용 프로그램은 백그라운드 작업다시 시작 버튼을 클릭하면 어떻게 재개 할 수 있습니까?

private long mStartTime = 0L; 

// 개인 긴 mPauseTime = 0L를 시작한 이후의 시간;

private TextView mTimerLabel; 

// 핸들러는 타이머 작업에 메시지를 처리 ​​할 수 ​​

private Handler mHandler = new Handler(); 

    static final int UPDATE_INTERVAL = 1000; 

    String timerStop1; 



    @Override 
    public void onCreate(Bundle savedInstanceState) { 

    mTimerLabel = (TextView) findViewById(R.id.textTimer); 


    if(mStartTime == 0L){ 
     mStartTime = SystemClock.uptimeMillis(); 
     mHandler.removeCallbacks(mUpdateTimeTask); 
     mHandler.postDelayed(mUpdateTimeTask, 100); 

     }     

     timerPauseButton.setTag(1); 
     timerPauseButton.setText("Pause"); 



final Button timerPauseButton = (Button) findViewById(R.id.btnTimerPause); 

     timerPauseButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view){ 

// ChangeButtonText

    final int status =(Integer) view.getTag(); 

        if(status == 1) { 
         mHandler.removeCallbacks(mUpdateTimeTask); 

         mTimerLabel.setText(timerStop1); 

         timerPauseButton.setText("Resume"); 
         view.setTag(0); //resume 
        } else{ 

         mHandler.removeCallbacks(mUpdateTimeTask); 
         mHandler.postDelayed(mUpdateTimeTask, 100); 
         timerPauseButton.setText("Pause"); 
         view.setTag(1); //pause 
         } 

      } 
     }); 

    } 

// 끝의에게 한 OnCreate

private Runnable mUpdateTimeTask = new Runnable(){ 

      public void run() { 
       { 
        final long start = mStartTime; 
        long millis = SystemClock.uptimeMillis()- start; 

        int seconds = (int) (millis/1000); 
        int minutes = seconds/60; 
        seconds = seconds % 60; 

        mTimerLabel.setText("" + minutes + ":" 
                + String.format("%02d", seconds));        

        timerStop1 = minutes + ":" 
           + String.format("%02d", seconds); 

        mHandler.postDelayed(this, 200);   
        } 

      }  
    }; 

것은 내가 클릭하는 이유 일시 중지 버튼이나 타이머도 실행됩니다. 백그라운드에서? 예를 들어 5 초 후에 3 초 안에 일시 중지를 클릭하면 이력서를 클릭하지만 계속해서 8 초에 3 초가 아닌가? 감사합니다.

답변

0

SystemClock.uptimeMillis() 기기가 잠자기 상태에 있지 않을 때 시계가 계속 실행됩니다. mStartTime에서 시작 시계 시간 만 캡처하므로 현재 upTimeMillis()mStartTime 사이의 차이가 커집니다. 일시 중지하면 시차가 나타나는 mUpdateTimeTask 만 중지됩니다.

+0

예, 그렇게 생각합니다. 하지만 그 방법을 말해 줄 수 있니? 고마워요 :) –

+0

그래서 ... 무엇을 성취하려고합니까? – laalto

+0

하나의 단추를 사용하여 일시 중지 및 다시 시작 타이머 기능을 수행합니다. 잠시 멈춤 기능은 이미 끝났지 만 이력서 기능에는 몇 가지 버그가 있습니다 ... 그래서 누구나 코딩을 가르쳐 줍니까? –

관련 문제