Удачная ли идея заменить AlarmManager на ориентирование по текущему времени в Android?

Рейтинг: 1Ответов: 1Опубликовано: 09.07.2023

Я хотел использовать AlarmManager для реализации таймера, как альтернатива java Timer.

В моём приложении есть TcpClient и в нем есть цикл для обработки сообщений от сервера и метод myTimer() в котором сейчас реализован, неудачный для Android, java Timer, который каждые 2 минут перезапускается если сообщение от сервера пришло, если же не перезапустить его - произойдет переподключение к серверу.

И тут вот я подумал, а что если просто сверяться по текущему времени в Android:

Date currentTime = Calendar.getInstance().getTime();

уж больно много требуется от новичка, чтобы учесть все нюансы работы с AlarmManager в разных версиях Android, а у меня задача реализовать аж под все версии от 5.0 до 14(который уже не за горами).

Вот и думаю надежный ли это способ, что скажите?

Ответы

▲ 0

Подобная идея реализована в java Timer, но он реализует для этого отдельный поток, что накладно - см. исходники(строка 193).

System.currentTimeMillis () - возвращает количество миллисекунд прошедших с полуночи 1 января 1970 года, это называется UNIX-время.

Можно попробовать реализовать свой Timer без использования потока с использованием процитированного метода.

А вот и пример кода такого таймера на Java:

long deley = 10*1000;
long tm = System.currentTimeMillis()+deley;
System.out.println("Времени прошло с 1 января 1970: "+String.valueOf(tm)+" милисекунд.\n");
        
while(true) {
   if(System.currentTimeMillis() >= tm) {
   System.out.println("Прошло "+String.valueOf(deley/1000));
   break;
}

А вместо другого потока использовать цикл для обработки сообщений, который и заменит цикл из моего примера. Профит.