web-dev-qa-db-fra.com

Exécuter la fonction après 5 secondes sous Android

Je suis nouveau dans le développement Android et maintenant mon activité de lanceur ne montre que 5 secondes, puis je veux vérifier si l’utilisateur est connecté ou non et s’effectue. 

voici mon code.

@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");
    }

}
19
Jishad

Vous pouvez utiliser le gestionnaire pour ajouter un peu de retard. Appelez la méthode displayData() comme ci-dessous afin qu'elle soit exécutée après 5 secondes.

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

Remarque: N'utilisez pas les threads tels que Thread.sleep(5000); car cela bloquerait l'interface utilisateur et le rendrait irresponsable.

60
Kartheek

Assign millisDelayTime variable avec les millisecondes souhaitées pour provoquer un délai. mActivity est un objet de Activity pour fournir un contexte d'application. Dans votre cas millisDelayTime devrait être initialisé avec 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);
  }
});
3
mushahid

Utiliser un compte à rebours

// 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();
2
Fantômas

Essayez ceci, créez du code CountDownTimer en un clic

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

    public void onFinish()
    {
        displayData();
    }
};
timer.start();
2
bongo
long delay = 1000;
long period = 50000;
Timer task = new Timer();
task.scheduleAtFixedRate(new TimerTask() {
    @Override
    public void run() {
        getDriver(sessionManager.getKEY(), ride_id);
    }
}, delay, period);
1
fazeel zama

La meilleure option pour y parvenir utilise un Handler :

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

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

               function(); //call function!

            }
        }, TIME);
1
Elenasys

Si possible, essayez d'éviter d'utiliser postDelayed. C'est une mauvaise pratique, car il peut perdre la référence aux objets que vous voulez dessiner sur votre écran et générer un NPE. Utilisez plutôt un gestionnaire. Tout d’abord, créez un gestionnaire de variables globales dans lequel vous devrez "manipuler" la logique de votre code. Faites-le en utilisant la fonction handleMessage.

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

Ensuite, où que vous souhaitiez l'exécuter, appelez simplement la fonction:

// 1 is the ID of your process
handler.sendEmptyMessageDelayed(1, 5000);

Rappelez-vous que dans la méthode onDestroyView (dans un fragment) ou dans la méthode onDestroy (dans une activité), vous devrez appeler 

    handler.removeMessages(1)
0
franzesz