Ваш onCreate()
метод имеет несколько огромных недостатков:
1) onCreate
готовит вашу активность - так что ничего, что вы здесь делаете, не будет сделано видимым для пользователя, пока этот метод не завершится! Например, вы никогда не сможете изменить текст TextView
здесь больше, чем ONE время, так как только последнее изменение будет нарисовано и, таким образом, видимым для пользователя!
2) Имейте в виду, что программа Android по умолчанию будет работать только в потоке ONE ! Таким образом: никогда не используйте Thread.sleep()
или Thread.wait()
в вашем основном потоке, который отвечает за ваш пользовательский интерфейс! (читайте «Поддерживайте отзывчивость вашего приложения» для получения дополнительной информации!)
Что делает ваша инициализация вашей Деятельности:
- без причины вы создаете новый
TextView
объект t
!
- вы выбираете
TextView
вашего макета в переменной t
позже.
- Вы устанавливаете текст
t
(но имейте в виду: он будет отображаться только после того, как onCreate()
завершится и цикл основного события вашего приложения будет запущен!)
- вы ждете 10 секунд в рамках вашего
onCreate
метода - это никогда не должно выполняться , так как оно останавливает все действия пользовательского интерфейса и обязательно вызовет ANR (приложение не отвечает, см. ссылка выше!)
- затем вы устанавливаете другой текст - этот будет отображаться, как только ваш метод
onCreate()
завершится, и будет обработано несколько других жизненных циклов действий методов!
Решение:
Установить текст только один раз в onCreate()
- это должен быть первый текст, который должен быть виден.
Создание Runnable
и Handler
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();
установить этот runnable как обработчик, возможно в onCreate()
(но прочтите мой совет ниже):
// run the mUpdateUITimerTask's run() method in 10 seconds from now
mHandler.postDelayed(mUpdateUITimerTask, 10 * 1000);
Совет: убедитесь, что вы знаете жизненный цикл Activity
! Если вы делаете подобные вещи в onCreate()
, это произойдет только тогда, когда ваш Activity
будет создан первый раз! Android может поддерживать ваш Activity
в течение более длительного периода времени, даже если он не виден!
Когда пользователь «запускает» его снова - и он все еще существует - вы больше не увидите свой первый текст!
=> Всегда устанавливайте обработчики в onResume()
и отключайте их в onPause()
! В противном случае вы получите «обновления», когда ваш Activity
вообще не виден!
В вашем случае, если вы хотите увидеть свой первый текст снова при повторной активации, вы должны установить его в onResume()
, а не onCreate()
!