En Java / Eclipse, ¿por qué establecer un punto de interrupción en mi código altera el efecto de esa sentencia?

Estoy escribiendo una aplicación de Android en Eclipse, y mostrar algún texto en la pantalla usando un TextView . Un hilo diferente a veces cambia el texto de esta vista, con el código siguiente:

 runOnUiThread(new Runnable() { @Override public void run() { view.setText(newLyric); } }); 

Quería depurar la línea setText para comprobar que la cadena correcta se estaba pasando (como para algún texto, no estaba en forma de palabra para ajustarse a la pantalla, y para el otro texto que era, pero eso es un problema diferente). Cuando pongo un punto de interrupción en esa línea, el texto siempre está envuelto en palabras. Y cuando inhabilito / quito el punto de interrupción, el texto que no consigue generalmente envuelto de palabra (es determinista) no se envuelve palabra.

Esto no tiene mucho sentido para mí. He visto esta pregunta , y entiendo el razonamiento detrás de eso, pero no puedo ver por qué ese sería el problema aquí. ¿Alguien puede arrojar algo de luz sobre esto? Estoy probando en un dispositivo, si eso hace alguna diferencia.


Edit: Resulta que era una condición de carrera, ahora sólo tengo que resolver cómo solucionarlo … Obviamente, sólo podía elegir una respuesta "correcta", pero gracias a todos por los comentarios útiles 🙂

Cosas como esta son a veces / a menudo un signo de una condición de carrera.

Poner un punto de interrupción elimina la raza (por lo que un hilo de "pícaro" que estaba anulando el valor ejecutando más tarde se ha terminado en el momento en que se captura su punto de interrupción, por ejemplo).

O es un caso claro de Heisenbug 🙂

Intente configurar la propiedad Halt VM para su punto de interrupción. El comportamiento predeterminado es detener simplemente el subproceso en ejecución. Si usted está recibiendo "contaminación" de otros hilos esto debería impedir que suceda.

Es posible, ya que el código se ejecuta en su propio hilo, que el código que configura la pantalla (y por lo tanto, decide o no a wordwrap) se ejecutaría antes o después de su llamada, ya que se ejecuta en otro hilo.

Por ejemplo, en TextViews, los eventos se dispararán y serán capturados por OnEditorActionListener .

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.