Как я могу ждать 10 секунд без блокировки пользовательского интерфейса приложения в android
Я столкнулся с проблемой, я хочу подождать 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();
}
Ответы
Ответ 1
Вы никогда не хотите вызывать thread.sleep()
в потоке UI
, поскольку это звучит так, как вы поняли. Это замерзает UI
и всегда плохо. Вы можете использовать отдельные Thread
и postDelayed
Этот ответ SO показывает, как это сделать, а также несколько других опций
Handler
TimerTask
Вы можете посмотреть на них и посмотреть, что лучше всего подходит для вашей конкретной ситуации.
Ответ 2
Вы можете использовать это:
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
// Actions to do after 10 seconds
}
}, 10000);
Ответ 3
Посмотрите на эти вопросы, они выглядят довольно похожими:
Ответ 4
1 с обработчиком:
handler.sendEmptyMessageDelayed(1, 10000);
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
//your code
}
}
};
Ответ 5
сделайте это в новом потоке (отделите его от основного потока)
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
}
}).run();