Créer un minuteur d'intervalle dans Java android

j'ai des plans pour créer une application d'intervalle en utilisant des minuteries. Il faut juste être le plus basique Donc je vais devoir ajouter un peu plus quand j'ai compris les bases. Ce que je veux, 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 utiliser le mieux? J'ai essayé le compte à rebours Android et ça a l'air de marcher. Mais est-il une autre qui est mieux?

15
demandé sur Keith Pinson 2012-10-27 16:31:36

1 réponses

je recommande 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 vous avez plus de contrôle sur elle.

le Handler est une classe qui gère l'exécution de code sur unLooper/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 dans le LooperHandler constructeur comme - new Handler(Looper.getMainLooper());

la raison pour laquelle je recommande le looper est parce que vous avez une plus grande flexibilité de contrôle, car c'est une abstraction légèrement plus bas sur le TimerTask méthodes.

généralement ils sont très utiles pour exécuter le code à travers les threads. Par exemple: utile pour la transmission de données à travers les threads.

Les deux principales utilisations 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 qui réduisent la création d'objets. Si vous envisagez d' mise à jour à haute vitesse de L'interface utilisateur etc - cela réduira la pression sur le collecteur d'ordures.

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;
            }
        }
    }
}

évidemment c'est une mise en oeuvre complète mais qui devrait vous donner une longueur d'avance.

42
répondu Chris.Jenkins 2016-02-24 15:00:13