Отмена регистрации приемников вещания на экране выключена для увеличения времени автономной работы - PullRequest
1 голос
/ 27 марта 2011

Я делаю виджет для Android, который активен только при включенном экране, чтобы продлить срок службы батареи. поэтому у меня есть один сервис, который работает все время и реагирует на ACTION_SCREEN_ON и ACTION_SCREEN_OFF. когда экран выключается, я отменяю регистрацию других вещательных приемников, а когда экран включается, я регистрирую их снова.

У меня такой вопрос: что лучше всего делать с батареей при выключении экрана? также лучше удалить переменные приемника вещания (т. е. m_Receiver = null;) или достаточно отменить регистрацию? удаление означает больше свободной памяти для системы, но вызывает сбор мусора и дополнительные операции с памятью (когда экран включается, мне нужно создать новый приемник), которые стоят дорого ...

1 Ответ

0 голосов
/ 27 марта 2011

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

Во-первых, я предполагаю, что под «виджетом» вы подразумеваете"виджет приложения".

Во-вторых, виджет приложения никогда не "активен".

, поэтому у меня есть одна служба, которая работает постоянно и реагирует на ACTION_SCREEN_ON и ACTION_SCREEN_OFF.

Это не очень хорошая идея.Во-первых, вы тратите мегабайты оперативной памяти, сохраняя процесс.Во-вторых, он не будет работать, так как Android не позволит сервису «работать все время» - он в конечном итоге отключит ваш сервис для старости.В-третьих, пользователей раздражают такие разработчики, как вы, у которых службы работают постоянно, поэтому они убивают ваш сервис с помощью программы-убийцы (Android 2.1 и ниже) или на экране Manage Services в приложении «Настройки» (Android 2.0 и выше).).

когда экран выключается, я отменяю регистрацию других вещательных приемников, а когда экран включается, я регистрирую их снова.

Понятия не имею, что "другие приемники вещания" являются.Они, вероятно, не должны быть зарегистрированы в первую очередь.

Мой вопрос заключается в том, что лучше всего делать в отношении времени работы от батареи, когда экран выключается.также лучше удалить переменные приемника вещания (т. е. m_Receiver = null;) или достаточно отменить регистрацию?удаление означает больше свободной памяти для системы, но вызывает сборку мусора и дополнительные операции с памятью (когда экран включается, мне нужно создать новый приемник), которые стоят дорого ...

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...