Acceso de objetos hijos de la clase android.view a través de hilos secundarios
Enviado por Alexander Hernandez • 25 de Agosto de 2015 • Ensayo • 2.063 Palabras (9 Páginas) • 150 Visitas
- Tema de la lección:
Acceso de objetos hijos de la clase android.view a través de hilos secundarios
- 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
- La nueva interpretación 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 aplicación dará error y se cerrará automáticamente. 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.
- 1 ó 2 ejemplos que confirman el nuevo supuesto:
Para demostrar como se debe acceder un recurso visual desde un hilo secundario, se mostrará a continuación un código que intentará mostrar un contador que se incrementa desde un hilo secundario y se visualizará en un textView creado por la actividad principal
Archivo MainActivity:
package com.example.ejemplohilo;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView tv=(TextView) findViewById(R.id.contadorViewer);
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
int counter=0;
while(true){
tv.setText(""+counter++);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();
}
@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;
}
}
Archivo XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text=""
android:id="@+id/contadorViewer"/>
RelativeLayout>
Al ejecutar este codigo se puede verificar que la aplicacion es cerrada por el administrador de tareas de android
[pic 2]
EN el DDMS se puede verificar que el sistema arroja un error indicando que “Solo el hilo que originalmente creó una jerarquía de elementos Views, puede tocar esos views”
...