Как проверить процессы и службы, потребляющие много батареи

Я создал приложение, которое потребляет 48 процентов батареи на каком-то устройстве, которое является самым высоким в задаче управления питанием, но на каком-то устройстве его 5-6%, я все время запускаю службу в фоновом режиме, которая получает широту и долготу и отправляет это на сервере, если пользователь вошел в систему. но я также проверил, выйдя из приложения, он все еще потребляет 48 процентов.

для получения широты и долготы с помощью API-интерфейса Fuse Location.

Так вот подскажите пожалуйста как решить этот вопрос с расходом батареи в каком то телефоне и как проверить какой процесс и служба жрет батарею.


person Android    schedule 18.06.2015    source источник
comment
За какое время расходуется 48% батареи? Ваш вопрос довольно неясен, вы можете немного его перефразировать;)   -  person LBes    schedule 18.06.2015
comment
@LonniBesançon я проверил в настройках›батарея/управление питанием›использование батареи› на этом экране показаны все приложения, которые потребляют батарею и сколько они там потребляют, я видел название моего приложения и 48%   -  person Android    schedule 18.06.2015
comment
Возможно, вы захотите попробовать отфильтровать какой-нибудь бесполезный вызов службы, которая извлекает широту и долготу, а затем нет? Я понятия не имею, почему некоторые телефоны будут использовать больше, чем другие, особенно намного больше, но это может быть связано с версией Android, которую они установили, нет?   -  person LBes    schedule 18.06.2015
comment
@LonniBesançon Но я работаю для отслеживания текущей должности сотрудника, поэтому я не могу выйти из службы. Устройство, показывающее большое потребление, имеет ту же версию Android, что и я, и на моем телефоне отображается 5%.   -  person Android    schedule 18.06.2015
comment
Я никогда не говорил, что вы должны бросить службу. Я сказал, что вы можете фильтровать некоторые звонки. Например, вам действительно нужно вызывать это каждую 1/1000 секунды? Или звонить каждые 4 секунды достаточно?   -  person LBes    schedule 18.06.2015


Ответы (2)


Я согласен с Лонни в том, что проблема в широте/долготе. Учитывая масштаб потребляемой мощности, 48%, вряд ли дело в самой схеме GPS. Я так понимаю это процессор. Мобильные процессоры очень энергоэффективны, если они не остаются активными. Позволь мне объяснить. Активный процессор — это самое энергоемкое устройство на мобильном устройстве. Так как же процессор может быть самым большим потребителем энергии, но при этом быть «энергоэффективным»? Под «энергоэффективным» процессором я подразумеваю, что когда процессор ничего не делает, он переходит в очень эффективное состояние с низким энергопотреблением, где его энергопотребление может быть на порядок меньше, чем в активном состоянии.

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

Вот мои рекомендации:

  • Используйте максимально возможный интервал между выборкой широты и долготы. Распространенной ошибкой является то, что большее количество проверок означает лучшую реакцию, но ненужные проверки, как правило, не улучшают реакцию, а просто поддерживают работу процессора и потребляют энергию без веской причины.
  • Никогда не голосуйте! Опрос поддерживает работу процессора, который потребляет энергию без уважительной причины. Усыпить процессор.
  • Используйте прерывания для обработки событий. Системные библиотеки, такие как sleep(), переводят процессор в неактивное состояние и используют прерывание для пробуждения процессора.
  • Не пишите свою собственную процедуру, если библиотечная процедура уже существует. Разработчики ОС/библиотек прекрасно осознают важность энергоэффективности и написали свой код так, чтобы он был максимально эффективным.
  • Сделайте так, чтобы ваш код работал как можно быстрее. Быстрота означает большее время простоя, что переводит процессор в более эффективное состояние питания. Например, если вы можете справиться с проверкой широты/долготы каждые 60 секунд, и вы можете выполнить обработку за 10 секунд вместо 30, у вас будет 50 секунд бездействия против 30 секунд.
  • Используйте хороший оптимизирующий компилятор и хорошие оптимизированные мобильные библиотеки, если это возможно. Хорошие компиляторы создают более эффективный и быстро работающий код. Хорошие библиотеки не только работают быстрее, но и используют энергоэффективные технологии.
  • Используйте пул потоков, если вы используете много потоков. Создание и удаление потоков требует больших затрат.
  • Убедитесь, что вы проверили спецификации API на своих устройствах. Я могу себе представить, что некоторые ОС/драйверы, например. GPS потребует, чтобы устройство было явно отключено, в то время как другие будут делать это неявно.

Вот еще немного информации: Безопасное для батареи кодирование

В сторону: я уже вижу пузырь с мыслями: «Почему одни устройства потребляют меньше энергии, чем другие?» Некоторые библиотеки действительно умны, они предвидят плохие методы программирования и находят обходные пути. Другие тупые. То же самое с ОС, системными библиотеками и планированием потоков.

person Taylor Kidd    schedule 19.06.2015

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

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

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

Редактировать: я не знаю, может ли Eclipse это сделать, и я не думаю, что это возможно. Однако вы можете проверить этот документ: http://www.usenix.org/event/usenix10/tech/full_papers/Carroll.pdf

person LBes    schedule 18.06.2015
comment
Я получаю lat_long каждые 30 секунд ...... как я могу проверить в eclipse, какой процесс потребляет батарею в моем приложении? - person Android; 18.06.2015
comment
Бумага помогла? Возможно, вы хотите отфильтровать более длинную выборку - person LBes; 19.06.2015