Interfaz de usuario de Android Thread.Sleep()

Estoy trabajando en un juego de memoria para Android y tengo un problema. Cuando el usuario toca la segunda imagen, si las imágenes no son iguales, quiero que se muestre la segunda imagen durante 1, 2 segundos.

Lo que he intentado es dormir durante 1-2 segundos. el subproceso de la interfaz de usuario después de activar la segunda imagen, pero esto no parece funcionar, ¡la segunda imagen no parece mostrarse! (solo se muestran las primeras imágenes)

Aquí está mi código:

public void whenTapedImage(View v, int position)
{
    i++;
    ImageView imgV=(ImageView)v;
    if(i%2!=0)
    {
        firstClick=position;
        imgV.setImageResource(im.images.get(firstClick));           
    }
    else
    {   
        secondClick=position;
        imgV.setImageResource(im.images.get(secondClick));                      
        try {
            Thread.currentThread().sleep(1000);
            if(!(im.images.get(firstClick).equals(im.images.get(secondClick))))
            {
                Toast.makeText(easyGame.this, "Try Again!", Toast.LENGTH_SHORT).show();
                im.notifyDataSetChanged();
                gridview.setAdapter(im);
                gridview.invalidate();
                aux=player1Turn;
                player1Turn=player2Turn;
                player2Turn=aux;
            }
            else{
                done=done+2;
                ImageAdapter.keepVisibleViews.add(firstClick);
                ImageAdapter.keepVisibleViews.add(secondClick);
                if(player1Turn==true)
                {
                    player1Score++;
                    String score=Integer.toString(player1Score);
                    score1.setText(score);
                }
                if(player2Turn==true)
                {
                    player2Score++;
                    String score=Integer.toString(player2Score);
                    score2.setText(score);
                }
            }   
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
    }           
}

¿Qué estoy haciendo mal?

preguntado el 12 de junio de 12 a las 19:06

but this doesn't seem to work. Esa no es una buena manera de hacer una pregunta. ¿Qué no funciona al respecto? -

@Falmarri: estoy de acuerdo en que no es una excelente manera de hacer la pregunta, pero en este caso el cuerpo de la pregunta no es realmente tan importante, ya que el título incluye algo bien conocido por ser incompatible con la arquitectura basada en eventos de la interfaz de usuario de Android . -

2 Respuestas

No debe suspender el subproceso de la interfaz de usuario, ya que esto evitaría que Android envíe cualquier otro evento a la interfaz de usuario de su actividad.

En su lugar, haga algo como usar un temporizador y hacer que el método del temporizador use la función de subproceso ejecutar en ui para realizar el cambio pospuesto deseado.

Para mayor solidez, es posible que deba implementar una máquina de estado (ya sea formalmente o en efecto) para realizar un seguimiento de lo que se supone que debe estar sucediendo; deberá decidir si el retraso actual debe cancelarse o aplicarse si se presiona otro botón, y hacer que la máquina de estado lo trate apropiadamente.

respondido 03 mar '14, 13:03

Esto es similar a Esperando en la aplicación de Android

Intente seguir la solución publicada allí y use el Clase de temporizador

contestado el 23 de mayo de 17 a las 13:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.