2017-12-01 16 views
0

私はアンドロイドプログラミングには慣れていて、アプリがフォーカスを取り戻した後、アンドロイドアプリでカウントダウンタイマーを再開しようとしています。ユーザーがアプリケーションに戻ったときに再開するタイマーの現在の状態の保存されたインスタンスを取得するにはどうすればよいですか?ここでカウントダウンタイマーを再開するandroid

が私のコードです:以下に示すように

private long resume_timer; 
    MainActivity.CounterClass count_timer; 
    TextView timer; 
    @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_advanced); 
    count_timer = new MainActivity.CounterClass(180000, 1000); 
      count_timer.start(); 
      public class CounterClass extends CountDownTimer { 
      public CounterClass(long millisInFuture, long countDownInterval) { 
       super(millisInFuture, countDownInterval); 
       // TODO Auto-generated constructor stub 
      } 

      @Override 
      public void onTick(long millisUntilFinished) { 
    // TODO Auto-generated method stub 
    resume_timer = millisUntilFinished; 
       long millis = millisUntilFinished; 
       String hms = String.format(Locale.getDefault(), 
         "%02d:%02d:%02d", 
         TimeUnit.MILLISECONDS.toHours(millis), 
         TimeUnit.MILLISECONDS.toMinutes(millis) 
           - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS 
           .toHours(millis)), 
         TimeUnit.MILLISECONDS.toSeconds(millis) 
           - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS 
           .toMinutes(millis))); 
       timer.setText(hms); 
      } 

     @Override 
      public void onFinish() { 
       timer.setText("time's up!!"); 
       } 
     @Override 
     protected void onPause() { 
      count_timer.cancel(); 
      super.onPause(); 
     } 
    @Override 
     protected void onResume() { 
      // how do i resume timer here? this logic dot work. 
count_timer = new MainActivity.CounterClass(resume_timer, 1000); 
      count_timer.start(); 
      super.onResume(); 
     } 

答えて

0

私は、アクティビティのライフサイクルを利用することによって、これを解決:

private long resume_timer; 
    MainActivity.CounterClass count_timer; 
    TextView timer; 
    @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_advanced); 
    count_timer = new MainActivity.CounterClass(180000, 1000); 
      count_timer.start(); 
      public class CounterClass extends CountDownTimer { 
      public CounterClass(long millisInFuture, long countDownInterval) { 
       super(millisInFuture, countDownInterval); 
       // TODO Auto-generated constructor stub 
      } 

      @Override 
      public void onTick(long millisUntilFinished) { 
    // TODO Auto-generated method stub 
    resume_timer = millisUntilFinished; 
       long millis = millisUntilFinished; 
       String hms = String.format(Locale.getDefault(), 
         "%02d:%02d:%02d", 
         TimeUnit.MILLISECONDS.toHours(millis), 
         TimeUnit.MILLISECONDS.toMinutes(millis) 
           - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS 
           .toHours(millis)), 
         TimeUnit.MILLISECONDS.toSeconds(millis) 
           - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS 
           .toMinutes(millis))); 
       timer.setText(hms); 
      } 

     @Override 
      public void onFinish() { 
       timer.setText("time's up!!"); 
       } 
     @Override 
     protected void onPause() { 
      count_timer.cancel(); 
      super.onPause(); 
     } 

    @Override 
    protected void onRestart() { 
     //resume timer when user comes back to the app 
     count_timer = new MainActivity.CounterClass(resume_timer, 1000); 
     count_timer.start(); 
     super.onRestart(); 
    } 
関連する問題