En un proyecto existente Android que he encontrado el siguiente fragmento de código (donde inserté la camada depuración)Ejecutable se registró con éxito pero no corre
ImageView img = null;
public void onCreate(...) {
img = (ImageView)findViewById(R.id.image);
new Thread() {
public void run() {
final Bitmap bmp = BitmapFactory.decodeFile("/sdcard/someImage.jpg");
System.out.println("bitmap: "+bmp.toString()+" img: "+img.toString());
if (!img.post(new Runnable() {
public void run() {
System.out.println("setting bitmap...");
img.setImageBitmap(bmp);
System.out.println("bitmap set.");
}
})) System.out.println("Runnable won't run!");
System.out.println("runnable posted");
}
}.start();
Nuevo en el desarrollo de Android, y después de haber buscado en Google alrededor, Entiendo que esta es la forma de hacer las cosas sin bloquear el hilo principal (UI), mientras aún se configura la imagen en el hilo de la interfaz de usuario después de la decodificación. (at least according to android-developers) (que he verificado por la tala Thread.currentThread().getName()
en varios lugares)
ahora veces la imagen simplemente no se presenta, única y stdout dice
I/System.out(8066): bitmap: [email protected] img: [email protected]
I/System.out(8066): runnable posted
con no dejar rastro de los mensajes de la Runnable. Aparentemente, Runnable no hace run()
, aunque img.post()
devuelve true
. Tirando de ImageView en onCreate()
y declararlo final
no ayuda.
No tengo ni idea. Simplemente establecer el mapa de bits directamente, mientras bloquea el hilo de la interfaz de usuario, arregla las cosas, pero quiero hacer las cosas bien. ¿Alguien entiende lo que está pasando aquí?
(ps. Todo esto fue observado en un Android 1.6 y el androide-3 SDK)
preguntas similares con respuestas útiles: [¿Cuál es la diferencia entre Activity.runOnUiThread (acción ejecutable) y Handler.post()?] (Http: // stackoverflow .com/questions/1839625/whats-the-difference-between-activity-runonuithreadrunnable-action-and-handler), [Diferencia entre Handler.post (Runnable r) y Activity.runOnUiThread (Runnable r)] (http://stackoverflow.com/questions/7452884/difference-between-handler-postrunnable-r-and-activity-runonuithreadrunnable) –