Je suis coincé avec un problème, je veux attendre 10 secondes parce que je veux que mon application commence le code ci-dessous après 10 secondes, mais sans empêcher cette personne de cliquer sur quoi que ce soit d'autre dans l'application (sans appelant 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();
}
Vous ne voudrez jamais appeler thread.sleep()
sur le thread UI
, car vous avez l’impression de le savoir. Ceci gèle le UI
et est toujours une mauvaise chose à faire. Vous pouvez utiliser un Thread
et un postDelayed
distincts
This SO answer montre comment faire cela ainsi que plusieurs autres options
Vous pouvez les regarder et voir ce qui fonctionnera le mieux dans votre situation particulière.
Vous pouvez utiliser ceci:
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
// Actions to do after 10 seconds
}
}, 10000);
Pour arrêter le gestionnaire, vous pouvez essayer ceci: handler.removeCallbacksAndMessages(null);
1avec gestionnaire:
handler.sendEmptyMessageDelayed(1, 10000);
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
//your code
}
}
};
faites ceci sur un nouveau fil (séparez-le du fil principal)
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
}
}).run();