写真●ガイドライン「Androidアプリ作成ガイドライン~効率的な通信制御に向けて~」の目次(資料から抜粋)
写真●ガイドライン「Androidアプリ作成ガイドライン~効率的な通信制御に向けて~」の目次(資料から抜粋)
[画像のクリックで拡大表示]

 NTTドコモは2012年10月18日、Androidのアプリで通信を効率的に制御するための開発者向けガイドライン「Androidアプリ作成ガイドライン~効率的な通信制御に向けて~」を公開した(公開サイト)。dメニューの公式コンテンツプロバイダ(CP)向けに提供していた内容を一部拡充し、一般開発者も参照できるようにした。開発者が携帯電話の通信制御の仕組みを理解してアプリを開発すれば、電池消費量抑制やレスポンス向上などの効果を見込める。NTTドコモは開発者向けのTipsなどを積極的に公開することで、アプリの質向上につなげる考え。

 携帯電話では無通信の状態が一定時間続くと、ネットワーク側の要求に基づいて端末の無線リソースを解放するPreservation機能を備えている。最近は端末側からネットワークに対して無線リソースの解放(または電池消費が抑えられる無線確立状態)を要求できるFast Dormancyと呼ぶ機能の搭載も進んでいる。ただ、結局はアプリの実装次第。アプリが頻繁に通信すれば、無線リソースの取得と解放が短時間で繰り返され、電池の消費量が増えるだけでなく、制御信号のやり取りでネットワーク側の負荷も高まる。

 そこで同ガイドラインでは、(1)アプリ単体の通信回数を減らす、(2)他のアプリと同時に通信することで端末当たりの通信回数を減らす、(3)通信のタイミングを端末間で分散させる――という3つのアプローチを紹介している(写真)。

 例えば(1)は、サーバーへのポーリング間隔を短くして疑似プッシュを実現しているアプリが多いが、米グーグルのプッシュ通知機能「Google Cloud Messaging(GCM)」の利用を推奨している。さらにポーリングが必要な場合もデータの更新頻度に応じて間隔を考慮し、ポーリング失敗時のリトライ処理も工夫すべきとしている。短い間隔でリトライ処理を繰り返すとネットワーク側への負荷はもちろん、電池の消費量も増える。1回目のリトライは1分後、2回目はその2分後、3回目はさらに4分後というように、リトライ回数の増加に応じて間隔を延ばすExponential Backoff制御の導入を推奨する。

 NTTドコモで1月25日に起きた障害は、スマートフォンによる制御信号の増加の見積もりが甘かったことが原因だった(関連記事1関連記事2)。今回のガイドラインに基づいた実装が進めば制御信号の抑制につながりそうだが、同社は特に見込んでいないという。「今回紹介したアプローチは必ずしもすべてのアプリに当てはまるものではなく、適用しない方が良い場合もある。あくまでも参考の位置付け」としている。