> Java > java지도 시간 > 본문

UI 스레드 규칙을 위반하지 않고 Android에서 타이머를 만드는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-06 12:17:02
원래의
695명이 탐색했습니다.

How to create a timer in Android without violating the UI thread rules?

타이머용 Android 스레드

이 코드 조각은 Java에서 타이머용 스레드를 생성하는 방법을 보여줍니다. 그러나 코드가 의도한 대로 작동하지 않습니다. 문제를 분석하고 해결책을 제시해 보겠습니다.

5분부터 0:00까지 카운트다운하는 타이머를 생성하기 위한 코드입니다. 이 문제는 Android에서 허용되지 않는 UI 스레드가 아닌 다른 스레드에서 UI를 업데이트하기 때문에 발생합니다.

해결책 1: CountDownTimer

이를 해결하려면 문제가 발생하면 UI 스레드에서 UI가 업데이트되는지 확인하면서 특정 간격으로 코드를 실행할 수 있는 CountDownTimer를 사용할 수 있습니다. 예는 다음과 같습니다.

<code class="java">public class MainActivity extends Activity {

    TextView timer1;
    CountDownTimer countdownTimer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        timer1 = findViewById(R.id.timer1);
        countdownTimer = new CountDownTimer(300000, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                // Update the timer text
            }

            @Override
            public void onFinish() {
                // Timer has finished
            }
        };
        countdownTimer.start();
    }
}</code>
로그인 후 복사

해결책 2: 핸들러

또 다른 옵션은 UI 스레드에서 실행될 작업을 예약할 수 있는 핸들러를 사용하는 것입니다. . 예는 다음과 같습니다.

<code class="java">public class MainActivity extends Activity {

    TextView timer1;
    Handler handler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        timer1 = findViewById(R.id.timer1);
        handler = new Handler();

        // Schedule a task to update the timer every second
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                // Update the timer text
                handler.postDelayed(this, 1000);
            }
        }, 1000);
    }
}</code>
로그인 후 복사

해결책 3: runOnUiThread를 사용한 타이머

타이머 사용을 선호하는 경우 runOnUiThread를 사용하여 UI를 업데이트하여 실행되는지 확인하세요. UI 스레드에서

<code class="java">public class MainActivity extends Activity {

    TextView timer1;
    Timer timer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        timer1 = findViewById(R.id.timer1);
        timer = new Timer();

        // Schedule a task to update the timer every second
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        // Update the timer text
                    }
                });
            }
        }, 1000, 1000);
    }
}</code>
로그인 후 복사

위 내용은 UI 스레드 규칙을 위반하지 않고 Android에서 타이머를 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿