타이머용 Android 스레드
제공된 코드는 5분에서 0까지 카운트다운하는 타이머를 생성합니다. :00, 예상대로 작동하지 않습니다. 문제는 UI 스레드가 아닌 스레드 내에서 UI를 업데이트하는 데 있습니다.
Android에서 스레드로 작업할 때는 UI 스레드가 아닌 스레드에서 UI를 업데이트하지 않는 것이 중요합니다. . 다음은 UI 업데이트가 UI 스레드에서 수행되는지 확인하는 동안 카운트다운하는 타이머를 생성하는 세 가지 대체 접근 방식입니다.
예:
<code class="java">public class MainActivity extends Activity { private TextView timer1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); timer1 = findViewById(R.id.timer1); startTimer(5 * 60 * 1000); // 5 minutes in milliseconds } private void startTimer(long time) { CountDownTimer timer = new CountDownTimer(time, 1000) { @Override public void onTick(long millisUntilFinished) { int minutes = (int) (millisUntilFinished / (1000 * 60)); int seconds = (int) (millisUntilFinished / 1000) % 60; timer1.setText(String.format("%02d:%02d", minutes, seconds)); } @Override public void onFinish() { timer1.setText("00:00"); } }; timer.start(); } }</code>
예:
<code class="java">public class MainActivity extends Activity { private Handler mHandler; private Runnable mRunnable; private int timeleft = 5 * 60; // 5 minutes @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mHandler = new Handler(); mRunnable = new Runnable() { @Override public void run() { if (timeleft >= 0) { int minutes = timeleft / 60; int seconds = timeleft % 60; timer1.setText(String.format("%02d:%02d", minutes, seconds)); timeleft--; } else { // Stop the timer mHandler.removeCallbacks(mRunnable); } mHandler.postDelayed(mRunnable, 1000); } }; mRunnable.run(); } }</code>
예:
<code class="java">public class MainActivity extends Activity { private Timer timer; private TimerTask timerTask; private int timeleft = 5 * 60; // 5 minutes @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); timer = new Timer(); timerTask = new TimerTask() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { if (timeleft >= 0) { int minutes = timeleft / 60; int seconds = timeleft % 60; timer1.setText(String.format("%02d:%02d", minutes, seconds)); timeleft--; } else { // Cancel the timer timer.cancel(); } } }); } }; timer.scheduleAtFixedRate(timerTask, 1000, 1000); } }</code>
위 내용은 Android 타이머의 스레드에서 UI를 안전하게 업데이트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!