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>
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>
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>
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!