Twoja onCreate()
metoda ma kilka ogromnych wad:
1) onCreate
przygotowuje Twoje działanie - więc nic, co tu robisz, nie będzie widoczne dla użytkownika, dopóki ta metoda się nie zakończy! Na przykład - nigdy nie będziesz mógł zmienić TextView
tutaj tekstu więcej niż JEDEN raz, ponieważ tylko ostatnia zmiana zostanie narysowana, a tym samym widoczna dla użytkownika!
2) Pamiętaj, że program na Androida - domyślnie - działa tylko w JEDNYM wątku! Dlatego: nigdy nie używaj Thread.sleep()
ani Thread.wait()
w głównym wątku, który jest odpowiedzialny za Twój interfejs użytkownika! ( aby uzyskać więcej informacji, przeczytaj „Utrzymuj responsywność aplikacji” )
To, co robi inicjalizacja działania, to:
- bez powodu tworzysz nowy
TextView
obiekt t
!
- później wybierzesz układ
TextView
w zmiennej t
.
- ustawiasz tekst
t
(ale pamiętaj: będzie on wyświetlany dopiero po onCreate()
zakończeniu pracy i uruchomieniu głównej pętli zdarzeń Twojej aplikacji!)
- czekasz 10 sekund w swojej
onCreate
metodzie - nigdy nie wolno tego robić, ponieważ zatrzymuje to całą aktywność interfejsu użytkownika i na pewno wymusi ANR (aplikacja nie odpowiada, patrz link powyżej!)
- następnie ustawiasz inny tekst - ten zostanie wyświetlony, gdy tylko
onCreate()
zakończy się Twoja metoda i kilka innych metod cyklu życia działania zostanie przetworzonych!
Rozwiązanie:
Ustaw tekst tylko raz onCreate()
- musi to być pierwszy tekst, który powinien być widoczny.
Utwórz a Runnable
iHandler
private final Runnable mUpdateUITimerTask = new Runnable() {
public void run() {
t.setText("Second text to display!");
}
};
private final Handler mHandler = new Handler();
zainstaluj to runnable jako handler, możliwe w onCreate()
(ale przeczytaj moją radę poniżej):
mHandler.postDelayed(mUpdateUITimerTask, 10 * 1000);
Rada: upewnij się, że znasz Activity
cykl życia! Jeśli będziesz robić takie rzeczy, stanie się onCreate()
to tylko wtedy, gdy Twój Activity
zostanie utworzony po raz pierwszy! Android prawdopodobnie utrzyma Cię Activity
przy życiu przez dłuższy czas, nawet jeśli nie jest widoczny! Kiedy użytkownik „uruchomi” go ponownie - a on nadal istnieje - nie zobaczysz już swojego pierwszego tekstu!
=> Zawsze instaluj programy obsługi onResume()
i wyłączaj je onPause()
! W przeciwnym razie będziesz otrzymywać „aktualizacje”, gdy Twój Activity
nie będzie w ogóle widoczny! W twoim przypadku, jeśli chcesz zobaczyć swój pierwszy tekst ponownie, gdy zostanie ponownie aktywowany, musisz go ustawić onResume()
, a nie onCreate()
!
.setText()
zastępuje cały „widżet” tekstem, który każesz mu ustawić; WŁĄCZAJĄC tekst, który już tam umieściłeś.