为什么Sleep首先执行而不是android中的代码?

Art*_*Art 2 java android

为什么首先执行try块,我希望颜色先改变,然后它应该睡眠5000毫秒.我的意思是系统在颜色变化之前就会睡觉.private OnClickListener CheckAnswer = new OnClickListener(){

    public void onClick(View arg0) {
        // TODO Auto-generated method stub

        disableButtons();
        Button incoming=(Button) arg0;
        if(incoming.getText().toString().equals(Q.getAnswer()))
        {
            incoming.setBackgroundColor(Color.GREEN);
            correct++;
            score+=15;
        }
        else 
        {
            incoming.setBackgroundColor(Color.RED);
            wrong++;
            if(C1.getText().toString().equals(Q.getAnswer()))
                C1.setBackgroundColor(Color.GREEN);
            else if(C2.getText().toString().equals(Q.getAnswer()))
                C2.setBackgroundColor(Color.GREEN);
            else if(C3.getText().toString().equals(Q.getAnswer()))
                C3.setBackgroundColor(Color.GREEN);
            modifyScore();

        }
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        questionGenerator();
    }
};`
Run Code Online (Sandbox Code Playgroud)

cyn*_*gus 9

我猜是因为视图的属性已更新,但屏幕重绘卡在你的睡眠后面.不要睡在主线上.

而是在您的Activity的onCreate中创建一个Handler并将延迟的Runnable发布到它.

private Handler mHandler;
protected void onCreate(Bundle savedInstanceState) {
    mHandler = new Handler();
}
...
private OnClickListener CheckAnswer = new OnClickListener() {
     public void onClick(View view) {
       // fix up view
       mHandler.postDelayed(new Runnable() {
           @Override
           public void run() {
               questionGenerator();
           }
       }, 10000);
   }
}
Run Code Online (Sandbox Code Playgroud)