Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Это немного больше, чем встроенные классы, но я считаю, что он намного эффективнее, и у вас есть больше контроля над ним.

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

Причина, по которой я рекомендую петлитель, состоит в том, что у вас более высокая гибкость управления, так как это немного более низкая абстракция по методам 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;
            }
        }
    }
}

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