Энергоэффективные приложения WM (запись в блоге)

авно купил себе новый мобильный телефон под управлением Windows Mobile 6.1 Professional. И, конечно же, я сейчас занимаюсь разработкой кода для хобби. Мой план состоит в том, чтобы служба работала как DLL, загружаемая Services.exe. Для этого необходимо собирать данные сома и выполнять обработку сома через регулярные интервалы (каждые 5-10 минут).

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

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

Держите систему в состоянии «Всегда включено», вызываяSystemIdleTimerReset периодически. Это кажется немного чрезмерным, и поэтому не может быть и речи.

Система периодически просыпается сCeRunAppAtTimeи войдите в необслуживаемое состояние, чтобы выполнить мою обработку.

Используйте автоматическое состояние вместо полной приостановки. Это будет прозрачно для пользователя, но система никогда не перейдет в спящий режим.

Второй подход представляется более предпочтительным, однако для этого требуется, чтобы система вызывала исполняемый файл при пробуждении, и единственной задачей было уведомить мой сервис о том, что он должен начать обработку. Это кажется немного ненужным, и я хотел бы избежать этого дополнительного исполняемого файла. Конечно, я мог бы переместить всю свою обработку в этот дополнительный исполняемый файл, но я хотел бы использовать некоторые из средств, предоставляемых при запуске в качестве службы, а также не иметь всплывающей программы (даже если она находится в фоновом режиме) при запуске обработки.

На первый взгляд, третий подход, похоже, имеет ту же основную проблему, что и первый. Тем не менее, я читал в некоторых блогах MSDN, что при таком подходе можно было бы реально сэкономить заряд батареи, вместо того чтобы часто входить и выходить из режима ожидания (аргументы для этого заключались в том, что природа платформы WM иметь очень низкое потребление батареи, когда система находится в режиме ожидания. И для того, чтобы вход и выход из режима ожидания требовали довольно большой обработки).

Итак, я думаю, мои вопросы следующие:

Какой подход вы бы порекомендовали в моей ситуации? Что касается сохранения минимального потребления батареи и приятной чистой реализации.

В случае подхода номер два, возможно ли устранить необходимость в уведомлении исполняемого файла? Либо через альтернативные функции API, либо через существующие универсальные приложения на платформе?

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

Реализация конкретного (бонусного) вопроса: нужно ли регулярно звонитьSystemIdleTimerReset остаться в автоматическом режиме?

И наконец, если вы думаете, что я преждевременно исключил подход номер один, скажите, пожалуйста, почему.

Пожалуйста, укажите в своем ответе, основываете ли вы свой ответ на знаниях или просто гадаете (последнее также очень приветствуется!).

Пожалуйста, оставьте комментарий, если вы считаете, что мне нужно уточнить какие-либо части этого вопроса.

Ответы на вопрос(2)

Ваш ответ на вопрос