Мій додаток для Android розряджається?


74

Я розробляю гру для Android. Він використовує вигляд поверхні та використовує стандартні 2D-інтерфейси для малювання, що надаються. Коли я вперше випустив гру, я робив усі найрізноманітніші речі, такі як перемальовування 9-патчів на кожному кадрі, а також з текстом. З тих пір я оптимізував більшу частину цього, малюючи об’єкти Bitmap та малюючи їх кожен кадр, лише повторно малюючи на об’єктах Bitmap, коли це потрібно.

Я вже отримував скарги на розряд акумулятора, і після моїх змін я хотів би знати (науково), чи робив я якісь покращення. На жаль, у мене немає жодних попередніх даних, тому було б найкориснішим порівняти продуктивність з якоюсь іншою грою.

Я запускав Traceview і використовував його результати здебільшого для ідентифікації процесорів, що забирають багато часу.

Отже - який найкращий спосіб визначити ефективність роботи акумулятора мого додатка та який хороший орієнтир?

Я знаю, що можу переглянути налаштування% s різних програм, але це знову ж ненауково, оскільки цифра, яку я отримую від цього, також залежить від того, що відбувається в усіх інших програмах. Я переглянув (більшість) документації Google, і хоча повідомлення чітке, що ви повинні економити заряд акумулятора (і час від часу дають підказки щодо того, як), мало що вказує на те, як я можу виміряти, наскільки добре працює моя програма виконання. Останнє, що я хочу, це більше скарг на розряд батареї в Android Market!

Заздалегідь спасибі.


РЕДАГУВАТИ

Дякуємо за всі ваші корисні поради / пропозиції. Насправді я хочу знати, як я можу використовувати дані, що надходять від Traceview (тобто: час процесора в мс, витрачений на кожен кадр гри), щоб визначити використання акумулятора (якщо це взагалі можливо). Читаючи моє початкове запитання, я бачу, що я був трохи розмитим. Знову дякую.


1
На жаль, я боюся, що метрик процесора недостатньо. Наприклад, надсилання невеликого пакета даних кожні 5 секунд через мережу буде витрачати більше, ніж відправлення багатьох пакетів одночасно, а потім тиху хвилину. Можливо, те саме стосується датчиків та GPS
Хейко Рупп,

Відповіді:


41

Ось моя пропозиція:

Я спостерігаю за енергоспоживанням під час розробки своїх програм (які іноді опитують датчики зі швидкістю <25 нс) за допомогою PowerTutor . Перевірте це, здається, це, можливо, те, що ви шукаєте, програма повідомляє, що ви використовуєте в мВт, Дж або відносно решти системи. Також результати розбиваються за процесором, Wi-Fi, дисплеєм (інші встановлені радіостанції). Єдина принада полягає в тому, що він написаний для конкретної моделі телефону, але я використовую його з великим успіхом на своїх EVO 4G, Galaxy S (Sprint Epic) та Hero.

Удачі, -Стів


Дякуємо, що єдиний прямо відповів на моє запитання! Спробує те, що ви пропонуєте, тоді прийміть свою відповідь.
Tom R

Не, я боявся, що буду далеко від цілі, виходячи з того, як відповідали всі інші. Але, інші відповіді допоможуть нам обом, на мою думку, багато корисних порад, щоб уникнути того, щоб додаток не був енергетичною свинею, що призводить до того, що користувач видаляє додаток!
Kingsolmn

PowerTutor - чудовий додаток, який мені дуже допоміг, але він не включає використання GPS у деталях програми. Dr Power - чудовий додатковий додаток для цього. Він не відображає графіки, але включає більше модулів у деталі програми.
LG

20

Існує ймовірність, що у вашій грі розряджується акумулятор. Я вважаю, що це залежить від кількох причин, які звучать так:

  • Ваша програма - це гра . Ігри швидко розряджають акумулятор.
  • Ви виконуєте ітерацію за допомогою Thread. Ви обмежили FPS, щоб центральний процесор пропускав непотрібні ітерації? Оскільки ви працюєте з 2D, я припускаю, що ви використовуєте SurfaceView. Для гри в режимі реального часу буде достатньо 60 кадрів в секунду.
  • Ви не зупиняєте час, Threadколи ваша заявка припиняється. Отже, ви повторюєте код, коли ваша програма не працює.
  • У вас є ітераційний замок, який робиться wait();під час onPause?

Люди, які коментують, що у вашій грі витікає заряд акумулятора, ймовірно, націлені, коли ваша програма не використовується. В іншому випадку, було б дивно , тому що кожна гра на ринку Android виснажує батарею - більш або менш.


Насправді, проблема, яку ви піднімаєте, - це та, яку я (думав) вирішив деякий час тому точно методом у вашій останній крапці: використання процесора, коли гра була призупинена, було через дах, але додавши wait () у петля паузи усунула проблему. Нещодавно я спостерігав за всіма своїми програмами за допомогою Watchdog, і жодного разу мою програму не виявляли вище порогового значення.
Tom R

Мені важко помітити, що акумулятор розряджається, якщо вищезазначені точки були виправлені. Ці точки є найбільш реалістичним способом вирішення споживання енергії. Подивіться , як це - як може ваша гра , можливо з'їсти батареї , якщо вище точки перевіряються?
Вроцлай

6

Якщо ви намагаєтесь оцінити "покращення порівняно з попередньою версією", я не думаю, що має сенс порівнювати з іншою грою! Якщо ці дві гри не роблять точно, це настільки ненауково, наскільки це можливо.

Натомість я б захопив попередню версію вашої програми з вихідного контролю, запустив її, виміряв, а потім запустив із найновішим кодом і порівняв ще раз.

Для порівняння ви можете, наприклад, скористатися інструментом командного рядка "top" (безумовно, доступний у boxbox, якщо ваш телефон укорінений, не впевнений, чи постачається він зі стандартним телефоном. Можливо, ні). Це показує використання процесором вашого процесу у відсотках.


1
Це гарна ідея і варто спробувати, але я не думаю, що моїм користувачам цікаво, чи покращилася продуктивність мого додатка - я думаю, вони просто не хочуть бачити величезний розряд акумулятора, який вони можуть пов’язати з моїм додатком . Я знаю, що це трохи суперечить тому, що я сказав "науковий", але те, що я справді хочу знати, це не "що краще використовувати акумулятор", а "що доречно". А потім візьміть звідти ...
Tom R

2
"Відповідне" - це все відносно. Ніхто не може дати вам відповіді на це.
хакбод

Хороша гра з показною графікою буде робити значне використання ЦП. Але для цього і потрібні всі потужності процесора. Якщо ви дійсно стурбовані, ви можете додати режим "легкого", який робить візуальні зображення більш статичними, але має частку витрат центрального процесора.
EboMike


2

як я можу використовувати дані, що надходять від Traceview (тобто: час процесора в мс, витрачений на кожен кадр гри) для визначення використання батареї (якщо це взагалі можливо)

Теоретично можна екстраполювати використання батареї для вашого додатка, дивлячись на споживання електроенергії на основі кадру. Найкращим способом досягти цього було б оцінити споживання енергії центрального процесора (лише) протягом певного періоду (скажімо, дві секунди), поки у вашому додатку працює найбільш інтенсивна робота процесора, (крім того, використання енергії графічного процесора можна було б визначити таким чином також) під час запису даних TraceView (таких як кадри в секунду або провали в секунду), що дає вам трафік через CPU / GPU протягом певної мілісекунди. Використовуючи ці дані, ви можете точно розрахувати середнє пікове споживання енергії для вашого додатка, провівши вищезазначений тест кілька разів.

Ось чому я кажу, що це лише теорія: Є багато змінних, які слід враховувати:

  1. Кількість та характер інших процесів, що працюють на момент вищевказаного тесту (інтенсивний процесор)
  2. Метод оцінки витрати електроенергії на CPU / GPU (хоча такі інструменти, як PowerTutor, ефективні для оцінки споживання енергії, в цьому випадку оцінка буде не такою ефективною через необхідність збору даних про енергоспоживання з відміткою часу. До того ж, приблизно будь-який метод збору даних про потужність ввів би додаткові накладні витрати ( кішка Шредінгера ), але це суворо залежить від рівня точності, який ви вимагаєте / бажаєте.)
  3. Причина інформації про споживання енергії - якщо ви хочете визначити споживання енергії вашого додатка для тестування або тестування / оцінки БЕТА, то це цілком можливе завдання з певним визначенням та відповідними інструментами. Якщо ви прагнете отримати корисну інформацію про споживання енергії "в дикій природі" на пристроях користувача, то я б сказав, що це правдоподібно, але не реалістично. Залучені камерності змусили б знемагати навіть самого рішучого та відданого дослідника. Вам доведеться тестувати на всіх можливих комбінаціях пристроїв / версій Android у дикій природі. Крім того, комбінації запущених процесів / потоків та встановлених програм, ймовірно, не можна розрахувати.

Сподіваюся, це дає деяке розуміння Вашого питання, хоча, можливо, я заглибився в нього глибше, ніж було потрібно.

-Стів


2

Для тих, хто шукає, надзвичайно корисним є один із ресурсів, який ми використовуємо - безкоштовний додаток від AT&T, який називається ARO.

Погляньте: ARO

Це мені допомагало раніше, і я не бачу, щоб це часто згадували, тому думав залишити його тут для тих, хто шукає.


0

"Я знаю, що можу переглядати% s різних програм через налаштування, але це знову ж ненауково, оскільки цифра, яку я отримую від цього, також залежить від того, що відбувається в усіх інших програмах."

Перше, що я б зробив, це полювати на програму, яка вже існує, з відомим постійним використанням акумулятора, а потім ви можете просто використовувати це як посилання для визначення використання вашого додатка.

Якщо такої програми немає, вам доведеться сподіватися на відповідь когось іншого ... і якщо вам вдасться створити таку програму, я б запропонував продати вашу нову програму "Довідка про використання акумулятора", щоб інші програмісти могли нею користуватися . :)


1
Проблема в тому, що оскільки все в% s, це все ще ненадійно. Як приклад: коли я відключаю Nexus від зарядного пристрою та починаю програвати програму на декілька хвилин, коли я перевіряю рівень споживання батареї, це більше 50%. Але це (сподіваємось) не означає, що заряд акумулятора надзвичайно високий. (вибачте, це не дуже добре сформульовано)
Tom R

Правильно, але якби там був додаток, який постійно використовував певну кількість мА, ви могли б зрозуміти, скільки використовував ваш додаток щодо нього ... наприклад, еталонний додаток становить 10%, і ви при 5%, тоді ви використовуєте половину цієї статичної кількості мА ... аналогічно, якщо ви перебуваєте на рівні 50%, але це 10%, тоді ви використовуєте в 5 разів більше мА. Як я вже говорив, можливо, що такої програми немає, але, мабуть, варто було б це зробити, якщо ви все одно збираєтесь піти на біду.
TimFoolery

3
Найбільш точний спосіб вимірювання витрати акумулятора (якщо заборонити наявність апаратного забезпечення для вимірювання фактичного заряду енергії) - це, мабуть, повністю зарядити пристрій, а потім побачити, як довго ваша програма може працювати, поки акумулятор не розрядиться. Все інше - наближення різної точності. Наприклад - використання батареї в даний час не враховує розряд енергії OpenGL.
hackbod

Так, я збирався запропонувати зробити це теж. Подивіться, скільки це триває, нічого не роблячи. Якщо це триває, скажімо, 48 годин, то в режимі очікування він використовує 2%. Якщо ви знаєте мАг акумулятора, то це також можна вкласти в мАг, а не лише відсоток. Потім подивіться, як довго це триває із вашою грою. Вісім годин (отримати допомогу від дитини чи двох) становитимуть 12,5% заряду акумулятора на годину, за винятком того, що ви можете видалити це базове навантаження в 2%.
TimFoolery

0

Я знаю, що це питання старе і пізнє, але для тих, хто приходить сюди шукати рішення, я пропоную поглянути на тест JouleUnit: http://dnlkntt.wordpress.com/2013/09/28/how-to- тест-споживання енергії на пристроях Android /

Він інтегрується в затемнення і дає вам велику кількість деталей про те, скільки батареї витрачає ваш додаток.


0

Я знаю три варіанти, які можуть допомогти вам мати науковий вимір:

  1. Використовуйте спеціально розроблене для цього обладнання. Мусонний ВИСОКОГОЛОТНИЙ МОНІТОР. https://msoon.github.io/powermonitor/PowerTool/doc/Power%20Monitor%20Manual.pdf
  2. Завантажте та встановіть Trepn Profiler (інструменти від Qualcomm) на свій телефон. Вам не потрібен комп’ютер для звітності. Звіти в прямому ефірі та в режимі реального часу по телефону. Завантажити Trepn Profiler можна за таким посиланням: https://play.google.com/store/apps/details?id=com.quicinc.trepn&hl=en_US

Зверніть увагу, що для недавнього телефону (з Android 6+) він працює в режимі оцінки. Якщо вам потрібні точні цифри, вам потрібно скласти список вибраних пристроїв. Перевірте наступне посилання для переліку: https://developer.qualcomm.com/software/trepn-power-profiler/faq Ви можете профілювати програми окремо та всю систему.

  1. Використовуйте Batterystats та Battery Historian від google. https://developer.android.com/studio/profile/battery-historian
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.