Управление питанием в Symbian

Существуют ли "лучшие практики" для написания энергоэффективного фонового приложения в Symbian?

В частности, есть ли способ (то есть API) для приложения Symbian, чтобы подсказка ОС относительно ее текущего состояния, чтобы уменьшить потребление батареи? В Android, например, существует понятие Wake Locks, которое не позволяет устройству переходить в режим ожидания. Есть ли что-то похожее в Symbian?

РЕДАКТИРОВАТЬ:
Есть ли какие-либо последствия при запуске кода в виде отдельного потока с библиотекой Open-C, а не в качестве "родного" Symbian C++, с использованием активных объектов и т. Д.? (код Open-C в большинстве случаев блокируется на IO).

5 ответов

Решение
  1. Вы можете проверить активность пользователя (in-) с помощью метода RTimer::Inactivity(). Этот способ описан на странице форума Nokia Wiki. Там также описано, как можно сбросить таймер неактивности.
  2. Вы можете проверить, включен ли экран устройства, используя HAL API. Смотрите классы HAL и HALData. Вы можете использовать такой звонок:

TInt displayState; HAL::Get(HALData::EDisplayState, displayState);И displayState будет держать либо 0, если дисплей выключен, либо 1 в другом случае.

С помощью этих API вы узнаете, активен ли пользователь сейчас, поэтому вы сможете изменить поведение фоновой службы, чтобы снизить ее энергопотребление.

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

Надеюсь это поможет.

РЕДАКТИРОВАТЬ: О отдельном потоке и Open C. Насколько я знаю, Open C это просто плагин и в глубине души все реализации по-прежнему "родной Symbian". Таким образом, поскольку вы избегаете периодического опроса какого-либо ресурса и просто используете обычный блокирующий ввод-вывод, ваш код экономичен по мощности по сравнению со стандартными технологиями активных объектов Symbian (которые используют специфичные для Symbian семафоры для блокировки потоков).

Придайте вашему приложению низкий приоритет (см. Классы RProcess и RThread). Ваш подход действительно будет зависеть от того, что делает ваше фоновое приложение. Эти вещи потребляют большую часть заряда батареи: радио (GSM/3G/WIFI/BlueTooth), подсветка экрана, доступ к файлам.

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

Я не встречал ничего особенного в Symbain, чтобы держать устройство в режиме ожидания. По сути, "лучшие практики" будут такими же, как и для всех мобильных устройств:

  • Не зацикливайтесь на ожидании, всегда используйте любые службы сигнализации, доступные на платформе, для Symbain ActiveObjects / User::WaitForXxx
  • Ограничьте количество фоновых потоков (в настоящее время все мобильные устройства все еще имеют только 1 процессор...)
  • Не держитесь за системные службы, закройте их как можно скорее (это обычно моя основная разрядка батареи в моих мобильных приложениях, иногда попытка определить, какая системная служба вызывает наибольшую разрядку батареи, может быть настоящей болью, WinMo очень плохо для этого).

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

Управление питанием является очень важной проблемой при разработке приложения.

В Symbian это зависит от того, что вы используете для выполнения фоновых действий.

Используете ли вы поток или элемент управления ActiveX.

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

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

На самом деле это очень хорошая тема, с которой вы столкнулись

Раньше был таймер неактивности, который мог быть сброшен приложением. Это предотвратит переход экрана в любой режим заставки.

Если вы используете различные асинхронные функции в Symbian, ваше приложение будет работать при необходимости.

Один из этих методов должен работать в зависимости от ваших потребностей. Если вы опишите, чего хотите достичь более подробно, вам будет легче помочь.

Другие вопросы по тегам