Эффективная реализация шаблона команд на основе времени в Android

#algorithm #performance #optimization #command-pattern

#алгоритм #Производительность #оптимизация #командный шаблон

Вопрос:

Я реализую своего рода шаблон команд в приложении, которое работает каждый день в течение всего дня на планшете Android.

Я хочу иметь возможность регистрировать команды, которые будут выполняться каждые X интервалов в день. Таймер отслеживает время и проверяет между интервалами, следует ли выполнять какие-либо из зарегистрированных команд.

Вопрос в том, как это сделать эффективно?

Пример:

Допустим, что интервал равен 10. Таким образом, команда может выполняться либо каждые 10 секунд 20 секунд (..) 110 секунд, либо любая другая, кратная 10.

Мы хотим зарегистрировать команду, которая будет выполняться каждые 60 секунд. Поэтому мы анализируем его вместе со значением 6 интервалов.

Теперь таймер будет отсчитывать до 10 секунд и проверять свой внутренний список команд. Это означает, что ему нужно рассчитать разницу между текущим количеством интервалов и количеством интервалов команд. Расчет может выглядеть следующим образом (в псевдокоде)::

 for(commands in commandList) {  if(command.taget_interval % current_interval == 0) command.execute() }   

Если зарегистрировано 10 команд, это означает, что мне нужно выполнять 10 пересчетов с использованием оператора по модулю каждый раз, когда анализируется 10 секунд. Имейте в виду, что команды могут иметь очень разное количество интервалов. Некоторые могут захотеть выполнить через 60 интервалов (один час), другие-через 9 (1,5 минуты), и у одного может быть цель для каждого интервала. Тем не менее, все эти пересчеты кажутся дорогостоящими.

Я также подумывал о том, чтобы сохранить их в Списке списков. Но также кажется расточительным создавать список из 86400 мест. Даже если вы могли бы использовать более разумную структуру данных, если одна из команд имеет интервал времени, равный единице, это означает, что приложение создаст экземпляр 86400 объектов и сохранит их. Подход со списком кажется более разумным при работе с большим набором команд, потому что работа может выполняться при добавлении команды, а не между каждым интервалом. Однако также кажется, что это может выйти из-под контроля.

Я продолжаю думать, что должен быть более простой и эффективный способ хранения этих команд и что это должно быть решенной проблемой. Однако после долгих поисков в Google я так и не смог найти решение. Вероятно, потому, что мне не хватает правильных ключевых слов.

Заранее спасибо всем, кто может дать какие-либо советы по этому поводу 🙂