2015-06-25 13 views
10

Sono nuovo nello sviluppo di Android e ora la mia attività di avvio mostra solo 5 secondi e dopo voglio verificare che l'utente abbia effettuato l'accesso o meno la funzione ed esegua le azioni.Esegui la funzione dopo 5 secondi in Android

ecco il mio codice.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    exactPreferences = getSharedPreferences("ExactPreference",MODE_PRIVATE); 
    setContentView(R.layout.activity_landing_page); 

    session = exactPreferences.getString(Model.getSingleton().SHARED_SESSION_ID,null); 
    Log.i("Session Id",session); 
     displayData(); // I want to perform this function after 5 seconds. 
} 


private void displayData() { 
    if(session.equals("")){ 
     Intent loginIntent = new Intent(LandingPage.this, 
       LoginActivity.class); 
     startActivity(loginIntent); 
     Log.i("User Logged In", "False"); 
    } 
    else 
    { 
     Intent objIntent = new Intent(LandingPage.this, 
       IndexPageActivity.class); 
     startActivity(objIntent); 
     Log.i("User Logged In", "True"); 
    } 

} 
+0

Utilizzare un CountDownTimer. –

+2

Utilizza PostDayayed Handler – Madhu

+0

http://stackoverflow.com/questions/11434056/how-to-run-a-method-every-x-seconds –

risposta

35

È possibile utilizzare il gestore di aggiungere qualche delay.Call il metodo displayData() come qui di seguito in modo che possa essere eseguito dopo 5 secondi.

new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      displayData(); 
     } 
    }, 5000); 

Nota: Non utilizzare i fili come Thread.sleep(5000); perché sarà bloccare l'interfaccia utente ed e rende irresponsive.

+0

grazie amico, Its Working good ,,,, – Jishad

+0

rimuovi anche runnable onPause() e aggiungi runnable onResume(). – NullByte

1

Utilizzare un CountDownTimer

// There's a TextView txtCount in Main Activity 

final int secs = 5; 
new CountDownTimer((secs +1) * 1000, 1000) // Wait 5 secs, tick every 1 sec 
{ 
    @Override 
    public final void onTick(final long millisUntilFinished) 
    { 
     txtCount.setText("" + (int) (millisUntilFinished * .001f)); 
    } 
    @Override 
    public final void onFinish() 
    { 
     txtCount.setText("GO!"); 
     finish(); 
     // Time's up - Start the Login Activity 
     final Intent tnt = 
      new Intent(getApplicationContext(), LoginActivity.class); 
     startActivity(tnt); 
    } 
}.start(); 
1

Prova questa, codice di creare CountDownTimer con un tick

timer = new CountDownTimer(5000, 5000) 
{ 
    public void onTick(long millisUntilFinished) 
    { 
    } 

    public void onFinish() 
    { 
     displayData(); 
    } 
}; 
timer.start(); 
2

Assegna millisDelayTime variabile con i millisecondi voi il desiderio di causare un ritardo. mActivity è un oggetto di Attività per fornire il contesto dell'applicazione. Nel tuo caso millisDelayTime deve essere inizializzato con 5000

mActivity.runOnUiThread(new Runnable() { 
@Override 
    public void run() { 
    final Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      //your code here 
     } 
    }, millisDelayTime); 
    } 
}); 
1

L'opzione migliore per raggiungere questo obiettivo utilizza un Handler:

int TIME = 5000; //5000 ms (5 Seconds) 

     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 

       function(); //call function! 

      } 
     }, TIME); 
2
int delay = 1000; 
        int period = 50000; 
        Timer task = new Timer(); 
        task.scheduleAtFixedRate(new TimerTask() { 
         @Override 
         public void run() { 
          getDriver(sessionManager.getKEY(), ride_id); 
         } 
        }, delay, period); 
Problemi correlati