web-dev-qa-db-fra.com

Comment puis-je attendre 10 secondes sans verrouiller l'interface utilisateur de l'application dans android

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();
   }
36
DarkVision

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

gestionnaire

TimerTask

Vous pouvez les regarder et voir ce qui fonctionnera le mieux dans votre situation particulière.

15
codeMagic

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);

150
Dullahan

1avec gestionnaire:

handler.sendEmptyMessageDelayed(1, 10000);
}

private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        if (msg.what == 1) {
           //your code
        }
    }
};
2
Anton Bevza

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();
2
Marcis