Table of Contents
バッテリーの寿命は、モバイルデバイスユーザビリティにおいて最も重要な要因の1つです。特に、iOSアプリケーションを一日中信頼できるユーザーにとっては、日々の作業に欠かせないものです。アプリは、より機能が豊富に増加するにつれて、継続的な処理、ネットワーク活動、および高解像グラフィックスの需要が増加し、バッテリーの排出を高速化します。これは、ユーザーが不満を招くだけでなく、保持率と負のレビューを下げることもあります。幸いにも、ベストプラクティスと現代のiOS APIの組み合わせにより、開発者は、iOSアプリの最適化をiOSの主要機能を利用して、iOSアプリを最適化することなく、エネルギー消費量を大幅に削減することができます。
iOSアプリでのバッテリー消費の理解
バッテリーの寿命を最適化するために、開発者はまずiOSアプリケーションが電力を消費する方法を理解しなければなりません。 デバイス上のほぼすべての操作は、バッテリーからエネルギーを描画しますが、一部の活動は他のものよりもはるかに要求されます。 バッテリー消費の主なカテゴリは次のとおりです。
- []ディスプレイとバックライト:[]]画面は、多くの場合、最大の電力消費量です。 高輝度、長時間のスクリーンオン時間、およびアニメーションや非効率的なUIアップデートから頻繁に再描画がすべて排水します。
- [ネットワークアクティビティ:]] セルラーモデムとWi-Fiラジオは、データを送信または受信する際に重要な電力を使用します。 無線が電力を占有し、接続し、各セッションのために再び電力を下回る必要があるため、頻繁で小さなネットワークコールは特に非効率的です。
- []背景タスク:[]]] 位置更新、背景フェッチ、またはVoIP接続などのバックグラウンドでプロセスを実行し続けるアプリは、デバイスが低電力状態に入るのを防ぐことができます。
- [CPUとGPU負荷:[]]複雑な計算、重度のグラフィックレンダリング、および過度のループは、プロセッサをアクティブに保つ、負荷に比例した電力を描画します。
- [センサー使用量:]]GPS、加速度計、またはマイクロホンなどのセンサーへの連続アクセスは、特に、アプリがサンプリング速度を管理したり、正しい精度レベルを使用できない場合、バッテリーをすばやく排出できます。
これらのコンポーネントが、アプリのプライマリ犯人であるかどうかを識別するには、Xcodeのエネルギー診断タブなどのツールをインストゥルメンツでプロファイリングする必要があります。 エネルギーログは、CPU使用量、ネットワーク活動、および位置情報の使用状況の詳細な内訳を表示し、ターゲットの最適化を有効にします。
開発者のための重要な戦略
効果的なバッテリー最適化には、エネルギー効率の高いAPIを使用して、不要な作業を減らし、システム電力状態を尊重するというレイヤードアプローチが含まれます。 以下は、継続的な使用量を要求するアプリにとって最もインパクトのある技術です。
背景アクティビティの最小化
背景の実行は主要なバッテリーのドレインです。 iOSはバックグラウンドワークのいくつかのメカニズムを提供しますが、それぞれはジューシーに使用する必要があります。 []] 背景フェッチ]を使用すると、アプリは定期的にデータが少量をダウンロードすることを可能にしますが、周波数はシステム管理されています。 を最大の許容間隔(例えば、)に設定すると、バックグラウンドの更新が不要な場合は、アプリが、アプリケーションは、システムがシステム管理されます。 代わりに、タスクは、タスクは、タスクの実行時に、タスクを強制的に動作させる[FLT] タスクを強制的に処理します。 [FLTF] タスクは、タスクは、タスクは、タスクは、タスクは、タスクは、タスクは、タスクは、タスクは、タスクは、タスクは、タスクは、タスクは、タスクは、タスクは、タスクは、タスクは、タスクは、タスクは、タスクは、タスクは、タスクは、タスクは、タスクは、タスクは、タスクは、タスクは、タスクは、タスクは、タスクを強制的に、タスクを強制的に、タスクを強制的に、タスクを強制的に
アプリケーションが位置サービスを使用している場合は、適切な精度レベルを選択します。 一定の高精度なGPS更新の代わりに、 region Monitoring または 重要な位置サービス[] を粗い位置追跡に使用します。 たとえば、ユーザーが入るときや公園が領域監視を使用するかを知る必要があるフィットネスアプリは、この設定を継続するGPS pollingert[FLT:]よりもはるかに効率的な領域監視を使用することができます。 [FLT:[FLT:] LT:] または、この機能を最適化するために、iOS[F] LT] を最適化します。
ネットワークの利用を最適化
ネットワーク操作は、特に細胞上にある巨大なバッテリードレインです。 これらのベストプラクティスを実行します。
- [ネットワークリクエストをバッチ:]]ではなく、多くの小さなAPI呼び出し、データを数えきに集計し、より大きなリクエストに集計します。 ラジオは、データが破裂し、その後のアイドルを送ることができるときに、高出力伝送モードでより少ない時間を費やします。
- [] 進行中のダウンロードを使用します:[]] 大量の画像やビデオファイルなどのアセットは、必要なデータのみを即座にダウンロードします。範囲(HTTP範囲のリクエスト)またはサイズアウェアAPIを使用します。
- []HTTP / 2またはQUIC:[]を有効にします。 これらのプロトコルは、接続オーバーヘッドを削減し、複数のストリームを割り当て、要求ごとにエネルギー消費を削減します。
- [] NSURLSessionを適切に割り当てます:[]])アプリが中断された場合でも、継続するべき転送の背景セッションを使用します。 フォアグラウンドセッションでは、を適切に設定し、接続が悪いときに、 [を関連付けて、接続が解除を避けるために使用します。
- ] 圧縮ペイロード:[]] サーバ側のgzipまたはBrotli圧縮を使用します。 より小さなデータは、伝送時間と無線電力を削減します。
ポーリングの代わりに[push通知を使用して検討してください。 プッシュは、システムがすべてのアプリのための単一の永続的な接続を維持し、アプリは新しいデータが到着したときにのみ、目覚めますので、よりエネルギー効率性が高くなります。 批判的アップデートのために、リモート通知で[](静的プッシュ)を使用して、彼らはまだ処理のために電力を消費するので、スパリンでバックグラウンドプッシュを使用します。
効率的なコード実行
不効率的なアルゴリズムとCPU使用量が隠されているバッテリードレインです。 ]] でコードをプロファイルします。Xcodeのタイムプロファイラ] ホットスポットを特定します。 一般的な問題は次のとおりです。
- []不要なポーリングループ:[]] 無効にした場合にタイマーのみ使用; 条件が変更したときにシステムが火災するコールバックやコールバックを解除する好意。
- []メインスレッドのヘビーコンピューティング:[] オフロード作業をバックグラウンドキュー(を使用して)、または[))))) に、UIアップデート用のメインランループを自由に保つ。
- []レイジーローディング:]] ロードリソース(画像、データモデル、ビューコントローラ)は、アプリの起動時にすべてをプリロードするのではなく、必要なときにのみ。
- []オブジェクト作成のオーバーヘッドを削減:[ 特にタイトループ(例えば、センサーからデータを処理するとき)で、可能なオブジェクトを再利用します。
Core ML のインフェレンスやメタルシェーダーの実行などの高周波操作では、iOS デバイスは CPU よりもはるかに電力効率の高い専用のハードウェア(Neural Engine、GPU)を持っています。 ハードウェアアクセラレーションで デバイスチェック] または ]]] を使用して、作業負荷に最も適切な API を使用していることを確認してください。 たとえば、 デバイスチェック を使用して、または ]]] アークイト ハードウェアアクセラレーションが CPU より CPU より、CPU より、CPU より CPU より、CPU が CPU より、CPU より、CPU より、CPU がより、CPU より、CPU がより、CPU より、CPU より、CPU がより、CPU がより、CPU より、CPU がより、CPU がより、より、CPU がより、CPU より、 がより、より、より、より、より、より、より、より、より、より
パワー効率性 API
iOSは、特に低消費電力のために設計された複数のAPIを提供しています。 これらを使用して、カスタム最適化なしで自動的にバッテリーを保存することができます。
- ] 背景構成のNSURLSession: は述べたように、それは、前景アクティビティよりもパワー集中力が少ない別のプロセスで転送を処理します。
- [AVCaptureSession – .photo output:[]]]カメラを使うと、ビデオの代わりに静止画像のプリセットを選択します。ビデオには、連続センサーの読み込みと処理が必要です。これにより、すぐに排水します。
- []コアロケーション - 更新を遅らせる:[[])バックグラウンドで実行すると、位置の更新はを使用して拒否することができます。 このバッチは、より少ないウェイクアップに更新されます。
- [] エナジーダッシュボード:[]] を使用して、ユーザーが低電力モードを有効にしたときにアプリの動作を適応させます。アニメーションを減らし、フレームレートを下げ、非必須同期を無効にしたり、低品質のリソースに切り替えたりします。
ハードウェアの最適化の活用
現代のiPhoneには、]のようなパワー管理ハードウェアが搭載されています。Mシリーズモーションコプロセッサ]と専用のエンコーダ/デコーダ。 可能な限り、これらのユニットにデータをオフロードします。 たとえば、ソフトウェアエンコーディングの代わりに、ハードウェアアクセラレーテッドH.264 / H.265エンコーディングでデバイスタイプを使用して、コアMLモデルは、ソフトウェアのエンコーディングを実行することができます。 同様に、コアMLモデルは、CPUの電源またはCPUの電源を使用することができます。
また、画像処理のために[]のメタパフォーマンスシェーダー[を検討してください。これは、CPUよりもエネルギー効率の高いGPU上で並列ワークロードを実行します。 シミュレータが電力動作を正確にモデル化しないため、物理的なデバイスで常にテストします。
ユーザー・ファクシングのヒントと設定
開発者は、消費電力の多くを制御しますが、ユーザーは、重アプリの使用中にバッテリー寿命を延ばすオプションもあります。 アプリ内プロンプトでは、ユーザーはより良い設定をユーザーに導くことができます。
- []より低い画面の明るさ:[]]]手動で明るさを減らすか、自動明るさ(設定>表示及び明るさ)を有効にするためにユーザーを励まします。
- [] 有効低電力モード:[] 連続使用(設定>電池)を期待する低電力モードを有効にすることを提案する。 システムは自動的にバックグラウンドアクティビティとパフォーマンスを削減します。
- []リフレッシュレートを削減:[]] ProMotion(120Hzディスプレイ)を備えたデバイスの場合、ユーザーは、設定>アクセシビリティ>モーション>フレームレートを制限することができます。 不要なときに、アプリは120Hzアニメーションを無効にすることでこれを尊重することができます。
- 不要なアプリを閉じる:]]iOSは、マルチタスクを効率的に処理しますが、背景アプリはリソースを消費します。 ユーザーがアプリをスワイプするのをお勧めします。
- []不要なサービスを停止する:[ Bluetooth、Wi-Fi、および場所サービスは必要なときにオフにすることができます。 場所のために、ユーザーは「常に」ではなく「While Use」にアプリの権限を設定することができます。
また、アプリ内の[]の低電力モード検出[を自動で追加して、リソースの使用量(例えば、ビデオの品質を下げ、同期を一時停止し、ポーリング頻度を削減)を自動的に削減することもできます。 これらは、トレードオフを理解しているため、ユーザーには明確に変更を伝えます。
コンテンツ
iOS アプリケーションにおけるバッテリー寿命の最適化は、ワンタイムのタスクではなく、ハードウェア、システムサービス、アプリコード間のインタープレイを理解するための継続的なプロセスです。 早期にプロファイリングすることで、パワー効率の高いAPIを使用して、バックグラウンドワークを最小化し、ユーザーパワー管理の選択肢を尊重し、開発者は、バッテリーを排出することなく、優れた継続的な使用経験を提供するアプリを作成することができます。 これらのプラクティスは、ユーザー満足度を高め、費用とヘルプデバイスが長持ちします。 詳細については、Appleの公式の公式のドキュメントを参照してください。 [FRTF] と [F] [F] [F] は、iOS [F] および [F] [F] [F] [F] は、iOS の[F] と [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F] [F]