web-dev-qa-db-fra.com

Android exécuter une tâche périodiquement

Je veux exécuter périodiquement une méthode dans une activité Android qui met à jour un certain champ après x secondes. Je sais que cela peut être fait dans timerTask mais quelle est la meilleure façon de le faire? soit utile.

20
Sultan Saadat

Vous devez utiliser Handler et sa fonction postDelayed. Vous pouvez trouver un exemple ici: Répéter une tâche avec un délai?

19
inazaruk

Vous pouvez également le faire par CountDownTimer

CountDownTimer countDownTimer;

 public void usingCountDownTimer() {
        countDownTimer = new CountDownTimer(Long.MAX_VALUE, 10000) {

            // This is called after every 10 sec interval. 
            public void onTick(long millisUntilFinished) {              
                setUi("Using count down timer");
            }

            public void onFinish() {              
                start();
            }
        }.start();
    }

et onPause ()

@Override
    protected void onPause() {
        super.onPause();
        try {
            countDownTimer.cancel();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
4
DalveerSinghDaiya

Vous pouvez utiliser ci-dessous Android classes:

1.Manipulateur

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

                  //your code
                   handler.postDelayed(this,20000); 
                    }
                },20000);

2.AlarmManager

AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);


            // Set the alarm to start at approximately 2:00 p.m.
            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(System.currentTimeMillis());

            Intent intent = new Intent(HomeActivity.this, Yourservice.class);
            alarmIntent = PendingIntent.getService(HomeActivity.this, 0, intent, 0);
            alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 600*1000, alarmIntent);
3
Rajesh.k