Практика Android Live Wallpaper для повышения производительности и экономии батареи?

Легко найти много статей, посвященных реализации Live Wallpapers для новичков, в которых рассматриваются основные вопросы, связанные с Surfaces и т. Д.

Но как насчет профессионального развития Live Wallpapers? Каковы наилучшие методы структурирования кода в правильном направлении, чтобы обеспечить хорошую производительность , низкое энергопотребление (чтобы сэкономить заряд батареи) и лучше всего подходят для разных устройств?

Если возможно, некоторые примеры кода, охватывающие эти проблемы, были бы замечательными.

Solutions Collecting From Web of "Практика Android Live Wallpaper для повышения производительности и экономии батареи?"

Потребляемая мощность …
1) Самое главное, безусловно, в том, что ваши обои должны отключиться, когда они не видны. Пример куба обрабатывает это правильно, удаляя возвратные обратные вызовы в onDestroy (), onSurfaceDestroyed () и onVisibilityChanged () (когда visible == false).
2) Кроме того, наибольшей детерминантой утечки мощности будет ваша частота кадров. Активация 24 кадров в секунду будет потреблять гораздо больше сока, чем часы, которые просто обновляются со скоростью 1 кадр / с, чтобы сделать свой тик с секундной стрелкой. Нет никакого способа обойти это, кроме как обучить пользователя, чтобы ожидания были разумными. Экшн-игра убьет вашу батарею, будь то приложение или живые обои.

Представление…
Рисование на холсте имеет преимущество простоты, но для очень сложных обоев вам нужно будет использовать OpenGL. Есть GLWallpaperService и AndEngine. Фондовые обои привязаны к использованию RenderScript (вам может показаться полезным найти этот код в дереве исходных текстов Android – гораздо сложнее, чем пример куба в SDK). И были некоторые разговоры о расширении libGDX для обработки обоев.

Наиболее подходящий…
Ну, это похоже на остальную часть Android: вам нужно проектировать свои работы с точки зрения масштабируемых пропорций, запросить устройство и соответствующим образом настроить. Для простых обоев обычно достаточно масштабировать свое произведение в onSurfaceChanged (), где вам заданы ширина и высота в качестве параметров. В некоторых случаях вы можете изучить полный DisplayMetrics.