Создание интервального таймера в Java android

У меня есть планы по созданию интервального приложения с помощью таймеров. Он должен быть самым простым, поэтому мне придется добавить еще немного, когда я пойму основы. Чего я хочу достичь, так это выбрать количество минут, которое должен длиться интервал, но сколько раз этот интервал должен идти. Как интервал, который длится 1 минуту и идет 8 раз. Вопрос в том, какой таймер лучше использовать? Я попробовал меня на таймере обратного отсчета Android, и он, похоже, работает. Но есть ли другой, который лучше?

1 ответов


Я бы всегда рекомендовал использовать Handler.

обработчик-это класс, который будет обрабатывать выполнение кода над определенным Looper / Thread по умолчанию поток, в котором он создается, в противном случае вы можете указать, где обработчик выполняет свой код, передав Looper до Handler конструктор как - new Handler(Looper.getMainLooper());

причина, по которой я бы рекомендовал looper, заключается в том, что у вас есть более высокая гибкость управления, так как это немного более низкая абстракция над TimerTask методы.

как правило, они очень полезны для выполнения кода в потоках. Е. Г. полезно для передача данных между потоками.

два основных применения:

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

простое использование!

или вы можете использовать сообщения, которые уменьшают создание объекта. Если вы думаете о высокая скорость обновления пользовательского интерфейса и т. д.-Это уменьшит давление на сборщик мусора.

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

очевидно, что это не полная реализация, но это должно дать вам фору.