41

我遇到了一个问题,我想等待 10 秒,因为我希望我的应用程序在 10 秒后启动下面的代码,但不阻止该人单击应用程序中的任何其他内容(调用Thread.sleep();)。

try {
    Log.v("msg", "WAIT CheckFrequencyRun");
    Thread.sleep(10000); // giving time to connect to wifi
    
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   //if no network
   if(wifiManager.getConnectionInfo().getNetworkId()==-1){
    //stop wifi
    wifiManager.setWifiEnabled(false);
    Log.v("msg", "no connection");
    handler.postDelayed(this, checkInterval);
   }
   //else connection
   else{
    Log.v("msg", "connection");
    onDestroy();
   }
4

4 回答 4

175

你可以使用这个:

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    public void run() {
     // Actions to do after 10 seconds
    }
}, 10000);

对于停止处理程序,您可以尝试以下操作: handler.removeCallbacksAndMessages(null);

于 2013-06-21T14:34:05.213 回答
18

你永远不想调用线程thread.sleep()UI因为听起来你已经想通了。这冻结了UI并且总是一件坏事。您可以使用单独的ThreadpostDelayed

这个 SO 答案显示了如何做到这一点以及其他几个选项

处理程序

定时器任务

你可以看看这些,看看哪个最适合你的特定情况

于 2013-06-21T14:08:17.163 回答
3

1带处理程序:

handler.sendEmptyMessageDelayed(1, 10000);
}

private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        if (msg.what == 1) {
           //your code
        }
    }
};
于 2013-06-21T14:18:28.130 回答
2

在新线程上执行此操作(将其与主线程分开)

 new Thread(new Runnable() {
     @Override
     public void run() {
        // TODO Auto-generated method stub
     }
}).run();
于 2013-06-21T14:11:15.873 回答