У меня есть планы по созданию интервального приложения с использованием таймеров. Это должно быть просто самое основное. Поэтому мне придется добавить еще немного, когда я понял основы. То, что я хочу достичь, - это выбрать количество минут, которое должен длиться интервал, но сколько раз этот интервал должен идти. Как интервал, который длится 1 минуту и идет 8 раз. Вопрос в том, какой таймер лучше всего использовать? Я попробовал меня на Android Timdown Timer и, похоже, работает. Но есть ли другой, который лучше?
Создание интервального таймера в Java-андроиде
Ответ 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;
}
}
}
}
Очевидно, что это не полная реализация, но она должна дать вам начало.