我遇到了一个问题,我想等待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();
}
你可以这样做:
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
// Actions to do after 10 seconds
}
}, 10000);
对于停止处理程序,你可以尝试这样做:handler.removeCallbacksAndMessages(null);
您永远不想在UI
线程上调用thread.sleep()
,因为听起来您已经弄清楚了。这会冻结UI
,这总是一件不好的事情。您可以使用单独的Thread
和postDelayed
这个SO答案展示了如何做到这一点以及其他几个选项
处理程序
TimerTask
你可以看看这些,看看哪一个最适合你的特殊情况
1with handler:
handler.sendEmptyMessageDelayed(1, 10000);
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
//your code
}
}
};
在新线程上执行此操作(将其与主线程分开)
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
}
}).run();