it-swarm.com.de

Wie kann ich 10 Sekunden warten, ohne die Benutzeroberfläche der Anwendung in android zu sperren?

Ich habe ein Problem, ich möchte 10 Sekunden warten, da meine Anwendung den folgenden Code nach 10 Sekunden starten soll, ohne dass diese Person auf etwas anderes in der Anwendung klickt (ohne Aufruf von 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

Sie möchten niemals thread.sleep() für den Thread UI aufrufen, da dies so klingt, als hätten Sie es herausgefunden. Dies friert den UI ein und ist immer eine schlechte Sache. Sie können ein separates Thread und postDelayed verwenden

Diese SO answer zeigt, wie das geht, sowie einige andere Optionen

Handler

TimerTask

Sie können sich diese ansehen und herausfinden, welche für Ihre spezielle Situation am besten geeignet ist

15
codeMagic

Sie können dies verwenden:

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

Für Stop the Handler können Sie Folgendes versuchen: handler.removeCallbacksAndMessages(null);

150
Dullahan

1mit Handler:

handler.sendEmptyMessageDelayed(1, 10000);
}

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

mach das auf einem neuen Thread (trenne ihn vom Haupt-Thread)

 new Thread(new Runnable() {
     @Override
     public void run() {
        // TODO Auto-generated method stub
     }
}).run();
2
Marcis