2013-06-21 13 views
25

Sono bloccato con un problema, desidero attendere 10 secondi perché voglio che la mia applicazione avvii il codice seguente dopo 10 secondi, ma senza impedire a quella persona di fare clic qualsiasi altra cosa nell'applicazione (senza chiamando Thread.sleep();).Come posso attendere 10 secondi senza bloccare l'interfaccia utente dell'applicazione in Android

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(); 
  } 
+0

postDelayed wont't bloccare il Ui ma Thread.Sleep fare. Rimuovi Thread.Sleep e continua il tuo lavoro nel Runnable –

risposta

12

Non vuoi mai di chiamare thread.sleep() sul filo UI come sembra come avete capito. Questo blocca il UI ed è sempre una brutta cosa da fare. È possibile utilizzare un separato Thread e postDelayed

This SO answer mostra come fare che così come diverse altre opzioni

Handler

TimerTask

Potete guardare queste e vedere quale funziona meglio per la tua situazione particolare

0

fare questo su un nuovo thread (separare dal thread principale)

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

gestore 1con:

handler.sendEmptyMessageDelayed(1, 10000); 
} 

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

qual è il "TRIGGER" perché la documentazione di Android richiede un int non può mettere la stringa – DarkVision

+0

Ho sbagliato ... questo è id del tuo messaggio. Prova con 1 –

118

È possibile utilizzare questo:

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

Facile, e hai lavorato senza sforzi extra. Avevo bisogno di qualcosa di conciso e funzionava come un incantesimo – user3833732

Problemi correlati