Heim > Java > javaLernprogramm > Hauptteil

Wie erstelle ich einen Timer in Android, ohne die Thread-Regeln der Benutzeroberfläche zu verletzen?

Barbara Streisand
Freigeben: 2024-11-06 12:17:02
Original
696 Leute haben es durchsucht

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

Android-Thread für einen Timer

Dieses Codefragment zeigt, wie man einen Thread für einen Timer in Java erstellt. Der Code funktioniert jedoch nicht wie vorgesehen. Lassen Sie uns das Problem analysieren und Lösungen anbieten.

Der Code soll einen Timer erstellen, der von 5 Minuten bis 0:00 herunterzählt. Das Problem entsteht, weil die Benutzeroberfläche von einem anderen Thread als dem UI-Thread aktualisiert wird, was in Android nicht zulässig ist.

Lösung 1: CountDownTimer

Um dieses Problem zu beheben Bei diesem Problem können Sie einen CountDownTimer verwenden, der es Ihnen ermöglicht, Code in bestimmten Intervallen auszuführen und gleichzeitig sicherzustellen, dass die Benutzeroberfläche im UI-Thread aktualisiert wird. Hier ist ein Beispiel:

<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>
Nach dem Login kopieren

Lösung 2: Handler

Eine weitere Option ist die Verwendung eines Handlers, mit dem Sie Aufgaben planen können, die im UI-Thread ausgeführt werden sollen . Hier ist ein Beispiel:

<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>
Nach dem Login kopieren

Lösung 3: Timer mit runOnUiThread

Wenn Sie lieber einen Timer verwenden möchten, denken Sie daran, die Benutzeroberfläche mit runOnUiThread zu aktualisieren, um sicherzustellen, dass er ausgeführt wird im UI-Thread.

<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>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie erstelle ich einen Timer in Android, ohne die Thread-Regeln der Benutzeroberfläche zu verletzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage