OpenWiki

Alarm Manager

Edit this page (last edited December 8, 2003)
Palm Notes | Recent Changes | Title Index | User Preferences | Random Page | Help
Alarm Manager существовал с первой версии Palm OS. Эта библиотека предназначалась для самой естественной задачи: вызов программы в заранее заданное время. Что умеет Alarm Manager?

Alarm Manager позволяет задать для каждой программы время, в которое она будет вызвана. В заданное время вне зависимости от состояния устройства (сон или активная работа), Palm OS передаст управление программе. Стоит учесть, что программа может задать только одно время активации. Если программа, как Datebook, позволяет вызвать несколько напоминаний, то только самое раннее время следует передавать в Alarm Manager. Все остальные алармы следует передавать по мере их активации. После каждого системного ресета программа должна заново восстанавливать свои алармы. Дискретность указания аларма достаточно большая - 1 секунда.

Аларм вызывается в указанное время. Строго говоря, он будет активирован в ближайжее подходящее время после заданного для аларма. подходящее время обозначает, что системная очередь сообщений будет активна. Если же во время, указанное для аларма, будут рассчитываться ряды Фурье, то до окончания счета аларм не будет вызван

Как происходит вызов аларма? Вызов осуществляется в две фазы: фаза действия и фаза показа. Для каждой фазы программа вызывается со специфическим кодом вызова.

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

Во время фазы показа программа может и должна оповестить пользователя о факте наступления важного события. Программа должна сама позаботиться о внешнем виде оповещения. Обычно эта фаза может затянуться надолго - до того, как пользователь отреагирует на форму на экране. Во время этой фазы другие алармы могут пройти фазу действия, но фаза показа будет задержана до завершения текущего аларма.

Важно понимать, что Alarm Manager не заботится о внешнем виде оповещений, эта библиотека заботится только о надлежащем вызове программ. Такое минимальное вмешательство в работу позволяет реализовать различные сценарии использования алармов:

В Palm OS 3.2 появился новый тип алармов - процедурные алармы. Эти алармы не запускают программу, а вызывает специально подготовленную функцию. Вызов функции происходит намного быстрее, так что такие алармы позволяеют реализовывать периодическую активизацию программы. Такие алармы позволяют быстро исполнять несложные действия, такие как обновление часов на экране, и реализовывать псевдо-мультизадачность. Вполне можно периодически проверять состояние tcp сокета и активизироваться по пришествию новых данных. У процедурных алармов есть одно достоинство - они не включают экран при активации из состояния сна.

В чем заключаются основные проблемы в использовании Alarm Manager? Основной проблемой является обработка последовательных алармов. Если Datebook активизирует десяток напоминаний, то для выхода в активную программу нужно закрыть все десять окон. Для сложных системных программ типа бэкапов возникает дилемма - в какой фазе бэкапиться? Если бэкапиться в фазе действия, то вывод интерфейса не очень симпатичен, а любой alert просто застопорит дальнейшую обработку алармов (для сброса таких алертов я написал Friendly Alarm ). А если бэкапиться в фазе показа, то показ любого аларма, произошедщий раньше не позволить запустить бэкап. Для решения части проблем был реализован Attention Manager.

Другой неприятностью является тот факт, что после пробуждения из спячки и исполнения аларма, экран остается включенным в лучшем случае на время автовыключения, а в худшем - до снятия с кредла (если включена опция stay in cradle). К сожалению Palm OS API не позволяет определить состояние машины перед активацией экрана, поэтому часто программы сами пытаются выключать экраны, независимо от активности пальмы перед запуском аларма.

Важно понимать, что Alarm Manager не подает звуковых сигналов и не рисует формы, это делает прикладная программа. Стоит различать действия Datebook во время аларма и собственно системные алармы.


Palm Notes | Recent Changes | Title Index | User Preferences | Random Page | Help
Edit this page | View other revisions
Print this page | View XML
Find page by browsing, searching or an index
Edited December 8, 2003 (diff)
Valid XHTML 1.0!Valid CSS!