Tu onCreate()
método tiene varios defectos enormes:
1) onCreate
prepara su actividad, de modo que nada de lo que haga aquí será visible para el usuario hasta que finalice este método. Por ejemplo, nunca podrá modificar TextView
el texto de a aquí más de UNA vez, ya que solo se dibujará el último cambio y, por lo tanto, será visible para el usuario.
2) Tenga en cuenta que un programa de Android se ejecutará, de forma predeterminada, en UN solo hilo. Por lo tanto: ¡nunca use Thread.sleep()
o Thread.wait()
en su hilo principal que es responsable de su interfaz de usuario! (lea "Mantenga su aplicación receptiva" para obtener más información).
Lo que hace la inicialización de su actividad es:
- ¡por ningún motivo creas un nuevo
TextView
objeto t
!
- eliges tu diseño
TextView
en la variable t
más tarde.
- establece el texto de
t
(pero tenga en cuenta: ¡se mostrará solo después de que onCreate()
finalice y se ejecute el ciclo de eventos principal de su aplicación!)
- espera 10 segundos dentro de su
onCreate
método; esto nunca debe hacerse ya que detiene toda la actividad de la interfaz de usuario y definitivamente forzará un ANR (la aplicación no responde, consulte el enlace de arriba).
- luego, establece otro texto: este se mostrará tan pronto como
onCreate()
finalice su método y se hayan procesado varios otros métodos del ciclo de vida de la actividad .
La solución:
Establecer texto solo una vez en onCreate()
: este debe ser el primer texto que debe estar visible.
Crea un Runnable
y unHandler
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();
instale este ejecutable como un controlador, posible en onCreate()
(pero lea mis consejos a continuación):
// run the mUpdateUITimerTask's run() method in 10 seconds from now
mHandler.postDelayed(mUpdateUITimerTask, 10 * 1000);
Consejo: ¡asegúrese de conocer Activity
el ciclo de vida de un! Si haces cosas así, ¡ onCreate()
esto solo sucederá cuando Activity
se cree tu primera vez! Es posible que Android te mantenga Activity
vivo durante un período de tiempo más largo, ¡incluso si no es visible! Cuando un usuario lo "inicia" de nuevo, y todavía existe, ¡ya no verá su primer texto!
=> ¡Instale siempre los controladores onResume()
y desactívelos onPause()
! De lo contrario, obtendrá "actualizaciones" cuando Activity
no esté visible en absoluto. En su caso, si desea volver a ver su primer texto cuando se reactive, debe configurarlo onResume()
, onCreate()
¡ no !
.setText()
reemplaza todo el "widget" con el texto que le indica que configure; INCLUYENDO texto que ya ha puesto allí.