2011-02-10 7 views

risposta

10

È possibile chiamare un Runnable utilizzando il metodo postDelayed() del gestore.

Ecco un esempio (http://developer.android.com/resources/articles/timed-ui-updates.html):

private Handler mHandler = new Handler(); 

... 

OnClickListener mStartListener = new OnClickListener() { 
    public void onClick(View v) { 
      mHandler.postDelayed(mUpdateTimeTask, 100); 
    } 
}; 

private Runnable mUpdateTimeTask = new Runnable() { 
    public void run() { 
     // do what you need to do here after the delay 
    } 
}; 

Props per @mad per ottenere nel modo giusto la prima volta intorno .

4

È possibile utilizzare il metodo postDelayed(Runnable action, long delayMillis) di un View per aggiungere un Runnable alla coda di messaggi da eseguire dopo un ritardo (approssimativo).

+0

Ciò consentirà il comportamento desiderato senza bloccare il thread dell'interfaccia utente. –

28

Utilizzare una chiamata PostDelayed() con una eseguibile che avvia l'attività. Un codice di esempio potrebbe essere

//will care for all posts 
    Handler mHandler = new Handler(); 

    //the button's onclick method 
    onClick(...) 
    { 
     mHandler.postDelayed(mLaunchTask,MYDELAYTIME); 
    } 

    //will launch the activity 
    private Runnable mLaunchTask = new Runnable() { 
     public void run() { 
      Intent i = new Intent(getApplicationContext(),MYACTIVITY.CLASS); 
      startActivity(i); 
     } 
    }; 

Si noti che questo consente l'interfaccia rimane reattiva. Dovresti quindi preoccuparti di rimuovere l'ascoltatore onclick dal tuo pulsante.

11

utilizzare questo codice

new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      final Intent mainIntent = new Intent(CurrentActivity.this, SecondActivity.class); 
      LaunchActivity.this.startActivity(mainIntent); 
      LaunchActivity.this.finish(); 
     } 
    }, 4000); 
0

A volte, u bisogno di farlo ogni volta che il processo di applicazione viene ucciso o meno. In tal caso non è possibile utilizzare la gestione eseguibile o i messaggi all'interno del processo. In questo caso puoi usare AlarmManager per questo. Spero che questo esempio aiuta nessuno:

Intent intent = new Intent(); 
... 

PendingIntent pendingIntent = PendingIntent.getActivity(<your context>, 0, intent, PendingIntent.FLAG_ONE_SHOT); 
AlarmManager mgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
mgr.set(AlarmManager.RTC, <your delay>, pendingIntent); 
0
runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      new Handler().postDelayed(new Runnable(){ 
       @Override 
       public void run() { 
        Intent intent = new Intent(getApplicationContext(), MainActivity.class); 
        startActivity(intent); 
       } 
      }, 4000); 
     } 
    }); 
0

provare questo pezzo di codice

new Timer().schedule(new TimerTask() {   
    @Override 
    public void run() { 

     // run AsyncTask here.  


    } 
}, 3000); 
Problemi correlati