ANTIGRAVITY LABEN
記事一覧/アプリ開発
アプリ開発/2026-07-06上級

端末を熱くしないライブ壁紙 — WallpaperService の描画ループを電力予算から設計する

ライブ壁紙は常時描画のせいで電池を削りがちです。可視性・アイドル・熱状態の3軸で描画を止める WallpaperService.Engine の設計と、適応フレームレート制御による消費電力の実測を、個人開発の壁紙アプリの文脈でまとめました。

Android26ライブ壁紙WallpaperServiceパフォーマンス5Antigravity313

プレミアム記事

星がゆっくり瞬く壁紙アプリに、ある日こんなレビューがつきました。「絵はきれいだけど、設定した日から電池の減りが倍くらいになった」。星の数はわずか数百、描画も単純なアルファ変化だけ。それでも実機で確認すると、画面を消していても CPU が動き続け、端末はほんのり温かいままでした。星がきれいでも電池を削れば評価は下がり、評価が下がれば AdMob の表示機会も細ります。壁紙アプリにとって電池は、絵の美しさと同じ重さの品質です。

ライブ壁紙の描画は「見えていないときも回り続ける」性質を持っています。ホーム画面に戻るたび、アプリを切り替えるたび、画面がロックされるたびに、描画スレッドがどう振る舞うかを設計していないと、静かに電力を垂れ流します。ここでは Google Play で配信している個人開発の壁紙アプリで、実際に電池消費を約6割削った、WallpaperService の描画ループの設計をまとめます。計測の反復には Antigravity のエージェントを使いました。

ライブ壁紙が電力を食う本当の理由

多くのサンプルコードは、Engine の中で Handler.postDelayed を使い、固定間隔で draw() を呼び続けます。これは動いている間は問題なく見えますが、電力の観点では3つの穴があります。

ひとつめは、可視性を無視した描画です。onVisibilityChanged(false) が来てもループを止めない実装だと、ホーム画面が別アプリに覆われている間も描画が続きます。ふたつめは、内容が変わらないフレームまで描き直すことです。星が完全に静止する瞬間や、アニメーションが1周して同じ画になる区間でも、律儀に60fpsで再描画すれば、その分だけ GPU とディスプレイのコンポジタが働きます。みっつめは、端末が発熱してサーマルスロットリングに入っても、要求フレームレートを下げないことです。熱くなった端末で高フレームレートを要求し続けると、システムがクロックを落とし、かえって1フレームあたりのコストが上がる悪循環に入ります。

つまりライブ壁紙の電力は、絵の複雑さよりも「いつ描くのをやめるか」の設計でほぼ決まります。私はこの前提に立って、描画を止める条件を明示的に持たせる方向へ作り直しました。

描画ループを「電力予算」から逆算する

先に予算を決めます。私の目安は「画面表示中で 60fps、静止時とアイドル時はゼロ描画、平均して画面点灯1時間あたりの追加消費を 30mAh 以内」に置きました。3,000〜4,000mAh クラスの端末で、時間あたり 1% 前後に相当します。この上限を超えたら、絵を諦めてでもフレームレートを落とす、という順序を最初に固定しておきます。

予算を守るために、描画ループへ次の3つのゲートを差し込みます。可視性ゲート(見えていなければ描かない)、アイドルゲート(内容が変わらなければ描かない)、熱ゲート(熱ければフレームレートを落とす)。この3つはいずれも「描画を減らす」方向にしか働きません。増やす判断は入れないことで、暴走を構造的に防ぎます。

ゲート判定材料効果
可視性onVisibilityChanged非表示中は描画スレッドを完全停止
アイドルフレーム差分・入力の有無変化がなければ次フレームを要求しない
熱状態PowerManager のサーマル通知60→30→10fps へ段階的にダウンシフト

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
可視性・アイドル・熱状態の3軸で描画を止める WallpaperService.Engine の実装
フレームレートを 60→30→10fps と段階的に落とす適応制御で消費電力を最大 62% 削減した実測
adb と dumpsys batterystats を Antigravity エージェントに回させる電力計測パイプライン
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

アプリ開発2026-07-03
ユニバーサルリンクが黙って壊れる — 関連付けファイルのドリフトをエージェントの検証ゲートで塞ぐ
ユニバーサルリンク/App Linksは、関連付けファイルやエンタイトルメントがズレると例外を出さずにブラウザへ落ちます。ルート定義を単一の真実源にまとめ、エージェントに週次と公開前の検証を任せる設計をまとめました。
アプリ開発2026-07-03
クラッシュ一覧には一度も現れない不調 — ANR トレースを ApplicationExitInfo で回収し、エージェントに切り分けを渡す設計
クラッシュハンドラに映らない ANR を ApplicationExitInfo で起動時に回収し、トレースの切り分けを Antigravity のエージェントへ安全に渡すまでの実装と5週間の実測値です。
アプリ開発2026-06-26
生成も配信も任せても、署名鍵だけは渡さない — AI 主導の配布パイプラインで鍵の管理と引き継ぎを設計する
AI Studio や Antigravity が生成から内部テスト配信までを肩代わりする時代でも、アプリの署名鍵だけは別格です。鍵を失えば、そのアプリは二度と更新できません。個人開発で複数アプリを長く運用してきた立場から、アップロード鍵とアプリ署名鍵の分離、鍵の保管、そして万一の引き継ぎまでを設計としてまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →