Ihre onCreate()
Methode weist mehrere große Mängel auf:
1) onCreate
bereitet Ihre Aktivität vor - so wird nichts, was Sie hier tun, für den Benutzer sichtbar gemacht , bis diese Methode abgeschlossen ist! Zum Beispiel - Sie können den TextView
Text eines Menschen hier nie mehr als EINMAL ändern, da nur die letzte Änderung gezeichnet und somit für den Benutzer sichtbar ist!
2) Beachten Sie, dass ein Android-Programm standardmäßig nur in EINEM Thread ausgeführt wird! Also: Verwenden Sie niemals Thread.sleep()
oder Thread.wait()
in Ihrem Haupt-Thread, der für Ihre Benutzeroberfläche verantwortlich ist! ( Weitere Informationen finden Sie unter "Halten Sie Ihre App ansprechbar" !)
Ihre Initialisierung Ihrer Aktivität bewirkt Folgendes:
- ohne grund erstellen sie ein neues
TextView
objekt t
!
- Sie wählen Ihre Layouts später
TextView
in der Variablen aus t
.
- Sie legen den Text von fest
t
(aber denken Sie daran: Er wird erst nach onCreate()
Abschluss angezeigt und die Hauptereignisschleife Ihrer Anwendung wird ausgeführt!)
- Sie warten innerhalb Ihrer Methode 10 Sekunden
onCreate
- dies darf niemals durchgeführt werden, da dadurch alle UI-Aktivitäten gestoppt werden und definitiv eine ANR erzwungen wird (Anwendung reagiert nicht, siehe Link oben!).
- Dann legen Sie einen anderen Text fest - dieser wird angezeigt, sobald Ihre
onCreate()
Methode abgeschlossen ist und mehrere andere Methoden des Aktivitätslebenszyklus verarbeitet wurden!
Die Lösung:
Stellen Sie den Text nur einmal ein onCreate()
- dies muss der erste Text sein, der sichtbar sein soll.
Erstellen Sie ein Runnable
und einHandler
private final Runnable mUpdateUITimerTask = new Runnable() {
public void run() {
// do whatever you want to change here, like:
t.setText("Second text to display!");
}
};
private final Handler mHandler = new Handler();
Installieren Sie diese ausführbare Datei als Handler, möglich in onCreate()
(aber lesen Sie meinen Rat unten):
// run the mUpdateUITimerTask's run() method in 10 seconds from now
mHandler.postDelayed(mUpdateUITimerTask, 10 * 1000);
Hinweis: Stellen Sie sicher, dass Sie den Activity
Lebenszyklus eines Menschen kennen! Wenn Sie solche Dinge tun, onCreate()
geschieht dies nur, wenn Sie Activity
das erste Mal erstellt werden! Android hält Sie möglicherweise Activity
länger am Leben, auch wenn es nicht sichtbar ist! Wenn ein Benutzer es erneut "startet" - und es noch vorhanden ist - wird Ihr erster Text nicht mehr angezeigt!
=> Handler immer einbauen onResume()
und deaktivieren onPause()
! Andernfalls erhalten Sie "Updates", wenn Ihre überhaupt Activity
nicht sichtbar sind! Wenn Sie in Ihrem Fall Ihren ersten Text wieder sehen möchten, wenn er erneut aktiviert wird, müssen Sie ihn festlegen onResume()
, nicht onCreate()
!
.setText()
angezeigt wird, ist, dass das gesamte "Widget" durch den Text ersetzt wird, den Sie festlegen sollen. EINSCHLIESSLICH Text, den Sie bereits dort abgelegt haben.