1. Tema de la leccin: Acceso de objetos hijos de la clase android.view a travs de hilos secundarios 2. Supuesto original, antes de que se tuviera esta experiencia: Es posible acceder y modificar objetos visuales de una actividad desde un hilo de proceso secundario 3. La nueva interpretacin o supuesto: Los objetos visibles en android (objetos hijos de la clase android.view) solo son accesibles desde el hilo que los creo, es decir, desde el hilo principal. Si se intenta modificar estos objetos desde un hilo secundario la aplicacin dar error y se cerrar automticamente. Para resolver esto, y lograr realizar modificaciones a objetos visuales desde hilos secundarios, es necesario hacer uso del objeto android.os.Handler el cual puede recibir mensajes desde hilos secundarios y ejecutar instrucciones en el hilo principal.
4. 1 2 ejemplos que confirman el nuevo supuesto: Para demostrar como se debe acceder un recurso visual desde un hilo secundario, se mostrar a continuacin un cdigo que intentar mostrar un contador que se incrementa desde un hilo secundario y se visualizar en un textView creado por la actividad principal
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; }
Al ejecutar este codigo se puede verificar que la aplicacion es cerrada por el administrador de tareas de android
LECCIONES APRENDIDAS FASE DE EJECUCIN
Fecha: Agosto de 2012 Versin: 05
Pg. 4 de 6
EN el DDMS se puede verificar que el sistema arroja un error indicando que Solo el hilo que originalmente cre una jerarqua de elementos Views, puede tocar esos views
Para resolver este inconveniente se encontr un elemento llamado handler el cual puede ser usado para comunicar el hilo secundario con el hilo principal de la siguiente manera: package com.example.ejemplohilo;
Handler h= new Handler(){ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); TextView tv=(TextView) findViewById(R.id.contadorViewer); tv.setText(""+msg.what);
} };
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; }
}
Haciendo uso del Handler como intermediario entre los threads, se resuelve el problema y el programa abre correctamente, mostrando un contador ascendente que cada segundo actualiza su valor.
LECCIONES APRENDIDAS FASE DE EJECUCIN
Fecha: Agosto de 2012 Versin: 05
Pg. 6 de 6
5. Por qu es importante la leccin: Es importante para la implementacin de aplicaciones multihilos, ya que al conocer esta leccin se evita el caer en el error antes expuesto y se ahorra tiempo en la implementacin del proyecto.