DEV Community 日本語
フォロー
Androidバックグラウンドサービス向けの低消費電力GPSジオフェンシングエンジンのアーキテクチャ
著者は、電話の通知設定の管理におけるヒューマンエラーによるフラストレーションを詳細に説明し、静かな環境での中断につながった。彼らは、コンテキストに基づいて電話のオーディオプロファイルを調整する自動化されたソリューションを作成することに触発された。既存の自動化ツールは、電波がないと電力を食いすぎるか、信頼性が低かった。目標は、サイレント、バイブレーション、ノーマルモードを自動的に管理する、プライバシーを尊重したデバイス常駐サービスだった。ジオフェンシングエンジンの開発において、著者はバッテリーを節約するために、定数的な位置情報更新よりもGeofencingClient APIを選択した。しかし、AndroidのDozeモードは、アプリがアクティブに使用されていない場合に信頼性を確保するために、ForegroundServiceの実装を必要とした。このアーキテクチャにより、ジオフェンス遷移時にオーディオコマンドを実行するためにアプリが短時間だけ起動することが保証された。ジオフェンスの精度よりもバッテリー効率を優先するという重要なトレードオフが行われた。著者は、信号反射による都市部でのGPSの信頼性の低さを発見し、異常なモード変更を防ぐためにデバウンスメカニズムを必要とした。同様に、時間ベースのトリガーに対してAlarmManagerは信頼性が低いことが判明し、重要なスケジュールされたイベントのためにsetExactAndAllowWhileIdleの使用を余儀なくされた。後者のパフォーマンスの問題のため、遷移履歴を管理するにはSharedPreferencesよりもSQLiteキャッシュが推奨された。バックグラウンドのAndroidユーティリティに関する中心的なアドバイスは、システム制約と戦うのではなく、GeofencingClientやWorkManagerのようなOS APIを活用することである。開発者は、デバイスの再起動や競合するルールなどのエッジケースを予測し、予測可能な動作とユーザーの信頼を優先する必要がある。著者は、真のユーティリティは機能数だけでなく信頼性にあることを強調し、彼らのアプリであるMuffleを実用的なデモンストレーションとして挙げている。