У вашего onCreate()
метода есть несколько серьезных недостатков:
1) onCreate
подготавливает вашу активность - так что ничего из того, что вы здесь делаете, не будет видно пользователю, пока этот метод не завершится! Например, вы никогда не сможете изменить TextView
текст здесь более ОДНОГО раза, так как будет отображено только последнее изменение и, следовательно, будет видно пользователю!
2) Имейте в виду, что программа Android по умолчанию запускается только в ОДНОМ потоке! Таким образом: никогда не используйте Thread.sleep()
или Thread.wait()
в своем основном потоке, который отвечает за ваш пользовательский интерфейс! (прочтите «Поддерживайте адаптивность приложения» для получения дополнительной информации!)
Что делает ваша инициализация вашей Activity:
- без причины вы создаете новый
TextView
объект t
!
- Вы выбираете свой макет
TextView
в переменной t
позже.
- вы устанавливаете текст
t
(но имейте в виду: он будет отображаться только после onCreate()
завершения и запуска основного цикла событий вашего приложения!)
- вы ждете 10 секунд в своем
onCreate
методе - этого никогда нельзя делать, поскольку он останавливает все действия пользовательского интерфейса и обязательно вызовет ANR (приложение не отвечает, см. ссылку выше!)
- затем вы устанавливаете другой текст - он будет отображаться, как только ваш
onCreate()
метод будет завершен и несколько других методов жизненного цикла Activity будут обработаны!
Решение:
Установить текст только один раз onCreate()
- это должен быть первый текст, который должен быть виден.
Создать Runnable
иHandler
private final Runnable mUpdateUITimerTask = new Runnable() {
public void run() {
t.setText("Second text to display!");
}
};
private final Handler mHandler = new Handler();
установить этот исполняемый файл в качестве обработчика, возможно onCreate()
(но прочтите мой совет ниже):
mHandler.postDelayed(mUpdateUITimerTask, 10 * 1000);
Совет: убедитесь, что вы знаете Activity
жизненный цикл! Если вы сделаете что-то подобное, onCreate()
это произойдет только тогда, когда ваш Activity
будет создан в первый раз! Android, возможно, сохранит вашу Activity
жизнь в течение более длительного периода времени, даже если его не видно! Когда пользователь "запускает" его снова - а он все еще существует - вы больше не увидите свой первый текст!
=> Всегда устанавливайте обработчики onResume()
и отключайте их onPause()
! В противном случае вы будете получать «обновления», когда вас Activity
вообще не будет видно! В вашем случае, если вы хотите снова увидеть свой первый текст при его повторной активации, вы должны установить его onResume()
, а не onCreate()
!
.setText()
заменяет весь «виджет» текстом, который вы ему указываете ; ВКЛЮЧАЯ текст, который вы там уже поместили.