Sleep()Android用户界面

Sleep()Android用户界面,android,multithreading,user-interface,Android,Multithreading,User Interface,我正在为Android开发一款记忆游戏,我遇到了一个问题。当用户点击第二个图像时-如果图像不相同,我希望第二个图像显示1,2秒 我试着睡1-2秒。激活第二个图像后的UI线程-但这似乎不起作用-第二个图像似乎不显示!(仅显示第一批图像) 这是我的密码: public void whenTapedImage(View v, int position) { i++; ImageView imgV=(ImageView)v; if(i%2!=0) { fi

我正在为Android开发一款记忆游戏,我遇到了一个问题。当用户点击第二个图像时-如果图像不相同,我希望第二个图像显示1,2秒

我试着睡1-2秒。激活第二个图像后的UI线程-但这似乎不起作用-第二个图像似乎不显示!(仅显示第一批图像)

这是我的密码:

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();
        }   
    }           
}

我做错了什么?

你不能让UI线程休眠,因为这会阻止android向你的活动UI发送任何其他事件

相反,做一些事情,比如使用计时器,让计时器的方法使用ui线程上运行工具来进行所需的更改

为了保证健壮性,您可能需要实现一个状态机(无论是正式的还是有效的)来跟踪应该发生的事情-您需要决定如果按下另一个按钮,当前延迟是否应该中止或强制,并使状态机适当地处理它。

这类似于


尝试按照上面发布的解决方案进行操作,并使用

,但这似乎不起作用。
这不是一个好的提问方式。什么不起作用?@falmari-我同意这不是一个很好的提问方式,但在这种情况下,问题的主体并不是那么重要,因为标题包含了一些众所周知的与android ui的事件驱动架构不兼容的内容。与