关于java:如果(语句)延迟

If(statement) delay

本问题已经有最佳答案,请猛点这里访问。

这是一个好奇的问题,但是否有办法延迟if语句的最后一行。

如:

1
2
3
4
if(m_Toolbar.getVisibility() == View.VISBILE) {
               ...........
    m_Toolbar.setVisibility(View.GONE);
}

你怎样才能把最后一行像(即"走了")一样推迟?


请不要使用会冻结用户界面的Thread.Sleep(),使用Handler

1
2
3
4
5
6
7
Handler h = new Handler();
h.postDelayed(new Runnable() {
            @Override
            public void run() {

            }
        },delayMilliseconds);

Thread.sleep会导致用户界面冻结,我建议改用Handler

1
2
3
4
5
6
7
8
9
if(m_Toolbar.getVisibility() == View.VISBILE) {
    ...........
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            m_Toolbar.setVisibility(View.GONE);
        }
    }, 3000);//3 seconds
}


最好的是:

1
2
3
4
5
6
7
8
9
 if(m_Toolbar.getVisibility() == View.VISBILE) {
    ...........
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            m_Toolbar.setVisibility(View.GONE);
        }
    }, 5000);//5 seconds
}

但如果你需要多重动作,你可以使用这个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
      if(m_Toolbar.getVisibility() == View.VISBILE) {

                    int Delay = 5;  //set Your request delay

                    new Thread(new Runnable(){
                        public void run() {
                              // TODO Auto-generated method stub

                             do{
                                  try {

                                      runOnUiThread(new Runnable() {
                                          public void run() {

                                              Delay --;

                                              if( Delay == 0){

                                                  m_Toolbar.setVisibility(View.GONE);
                                              }else if( Delay == 1){
                                                    //another action

                                               }

                                          }
                                      });  

                                      Thread.sleep(1000);


                                  } catch (InterruptedException e) {
                                      //TODO Auto-generated catch block
                                      e.printStackTrace();
                                  }

                              }while(Delay > 0);

                           }
                      }).start();



    }

您可以使用以下等待一秒钟的TimeUnit.SECONDS.sleep(1);