Faire une minuterie d'intervalle dans Java Android


J'ai l'intention de créer une application d'intervalle en utilisant des minuteries. Il devrait juste être le plus basique, donc je devrai en ajouter un peu plus quand j'aurai compris les bases. Ce que je veux réaliser, c'est sélectionner le nombre de minutes qu'un intervalle devrait durer, mais combien de fois cet intervalle devrait durer. Comme un intervalle qui dure 1 minute et va 8 fois. La question est de savoir quelle minuterie est la meilleure à utiliser? Je me suis essayé sur le compte à rebours Android et cela semble fonctionner. Mais est-il une autre qui est mieux?

Author: Keith Pinson, 2012-10-27

1 answers

Je recommanderais toujours d'utiliser un Handler.

C'est un peu plus de travail que les classes intégrées, mais je trouve que c'est beaucoup plus efficace et que vous avez plus de contrôle dessus.

Le gestionnaire est une classe qui gérera l'exécution de code sur un Looper / Thread par défaut, le Thread dans lequel il est créé, Sinon vous pouvez spécifier où le Gestionnaire exécute son code en passant le Looper au constructeur Handler comme - new Handler(Looper.getMainLooper());

La raison pour laquelle je recommanderais le looper est parce que vous avez une plus grande flexibilité de contrôle, car il s'agit d'une abstraction légèrement inférieure aux méthodes TimerTask.

Généralement, ils sont très utiles pour exécuter du code à travers les threads. Par exemple utile pour les données de tuyauterie à travers les fils.

Les deux utilisations principales sont:

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    final Handler h = new Handler();
    h.postDelayed(new Runnable()
    {
        private long time = 0;

        @Override
        public void run()
        {
            // do stuff then
            // can call h again after work!
            time += 1000;
            Log.d("TimerExample", "Going for... " + time);
            h.postDelayed(this, 1000);
        }
    }, 1000); // 1 second delay (takes millis)
}

Utilisation simple!

Ou vous pouvez utiliser des messages, ce qui réduit la création d'objets. Si vous envisagez de mettre à jour l'interface utilisateur à grande vitesse , etc., cela réduira la pression sur les ordures collecteur.

class MainActivity extends Activity {

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

        MyTimers timer = new MyTimers();
        timer.sendEmptyMessage(MyTimers.TIMER_1);
        timer.sendEmptyMessage(MyTimers.TIMER_2);

    }


    public static class MyTimers extends Handler
    {

        public static final int TIMER_1 = 0;
        public static final int TIMER_2 = 1;

        @Override
        public void handleMessage(Message msg)
        {
            switch (msg.what)
            {
                case TIMER_1:
                    // Do something etc.
                    Log.d("TimerExample", "Timer 1");
                    sendEmptyMessageDelayed(TIMER_1, 1000);
                    break;
                case TIMER_2:
                    // Do another time update etc..
                    Log.d("TimerExample", "Timer 2");
                    sendEmptyMessageDelayed(TIMER_2, 1000);
                    break;
                default:
                    removeMessages(TIMER_1);
                    removeMessages(TIMER_2);
                    break;
            }
        }
    }
}

Il s'agit évidemment depas de une implémentation complète mais cela devrait vous donner une longueur d'avance.

 42
Author: Chris.Jenkins, 2016-02-24 15:00:13