前提・実現したいこと
Android Studioでストップウォッチを作っています。
発生している問題・エラーメッセージ
HandlerとLooperによるループ処理を使って10ミリ秒単位でカウントさせたいのですが、約2倍ほど遅れてしまいます。
100ミリ秒単位でカウントさせるとうまく動作しました。なぜ10ミリ秒だとうまく行かないのでしょうか?
該当のソースコード
Java
1// import文、質問と関係ない箇所は省略しています。 2 3public class MainActivity extends AppCompatActivity { 4 5 private static Boolean isActive = false; 6 private Button playButton; 7 private TextView timerText; 8 private int time = 0; 9 private final SimpleDateFormat dateFormat = new SimpleDateFormat("mm:ss:SS"); 10 11 private final Handler handler = new Handler(Looper.getMainLooper()); 12 private final Runnable runnable = new Runnable() { 13 @Override 14 public void run() { 15 time ++; 16 // ここの"10"を"100"に変えると正常に動作します。 17 timerText.setText(dateFormat.format(time * 10)); 18 handler.postDelayed(this, 10); 19 } 20 }; 21 22 @Override 23 protected void onCreate(Bundle savedInstanceState) { 24 super.onCreate(savedInstanceState); 25 setContentView(R.layout.activity_main); 26 27 playButton = findViewById(R.id.playButton); 28 timerText = findViewById(R.id.timer); 29 } 30 31 public void startTimer(View view) { 32 if(!isActive) { 33 isActive = true; 34 handler.post(runnable); 35 36 // backgroundとonclickを停止ボタンのものにする 37 playButton.setBackground(getResources().getDrawable(R.drawable.stop_button)); 38 playButton.setOnClickListener(this::stopTimer); 39 } 40 } 41 42 public void stopTimer(View view) { 43 if(isActive) { 44 isActive = false; 45 handler.removeCallbacks(runnable); 46 47 // backgroundとonclickをスタートボタンのものにする 48 playButton.setBackground(getResources().getDrawable(R.drawable.play_button)); 49 playButton.setOnClickListener(this::startTimer); 50 } 51 } 52}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/02 04:40