2011.09.08

Android:サーバー通信について

雑記です。
モバイル端末のアプリで、サーバー通信が必要なアプリ開発の場合、避けては通れないのが通信状態の考慮でしょう。サーバー通信をするときにどういった点を考慮すればいいのか、考えてみます、、、

モバイルの場合、PC 上で動かすクライアントアプリや Web アプリのようにある程度確保されたネットワーク通信とは異なります。歩きながらの通信もあるでしょうし、電車の中、車、新幹線と通信が不安定あるいは切断されるケースもあります。それらの点を踏まえてどういうプログラムを組めばいいのでしょうか。

・リトライ回数を設ける
1度の通信で成功すればもちろんOKなのですが、通信状態によってはたまたまそのとき失敗するというケースも多々あるでしょう。そのようなときのために、1回の試行ではなく、失敗したら何回か試行させるリトライ回数を設けた方が良いのではないでしょうか。

・タイムアウトを設ける
ネットワークが不安定、リクエストを投げたけど、レスポンスが帰ってこないというケースもあるでしょう。その間、ユーザーは待ちぼうけ…というのは、まずいですよね。サーバー通信をする際は、ユーザーにストレスを与えない程度のタイムアウト時間を設けるのが良いのではないでしょうか。

・非同期通信にする
サーバーのレスポンスを待たなくても、アプリの操作をさせてよい場合があると思います。そのようなときは、非同期通信をさせるようにしましょう。AsyncTask というクラスを継承したクラスを作成すれば、非同期通信にできます。もちろん、レスポンスを取得してからでないと、次の操作に進ませないのであれば、同期通信のままでよいです。

・端末の通信状態を確認する
そもそも端末がネットワーク通信できない状態(機内モードなど)であれば、サーバー通信はできません。通信状態を確認し、通信不可であれば、エラーダイアログを出して終了させるのがいいでしょう。

とりあえず、以上です。
まだまだ考慮すべき点はあるかもしれませんが、今思いつくのはこのくらいかな。かくいう私も、上記の実装を実現したものはまだ作っておらず、これからなのですが、これらを実現する実装を模索したいと思います。