LoginSignup
15
15

More than 5 years have passed since last update.

Androidの通信まわりの実装について考える [メモ]

Last updated at Posted at 2013-12-06

複数の通信があって戻り値のパターンが各通信毎にある場合を想定しています。
通信結果はJSONで受けとります。
AsyncTaskにはバグがあるという噂なので新しいAsyncTaskLoaderを使います。

AsyncTaskLoaderについて
- 時代は AsyncTask より AsyncTaskLoader
http://archive.guma.jp/2011/11/-asynctask-asynctaskloader.html

※4以外は実装可能か試していません

1. 1つのAsyncTaskLoaderを使い戻り値はJSONにする。JSON→欲しい戻り値にするメソッドは別のクラスにまとめる

メリット

  • 単純な作りなのでわかりやすい
  • 通信クラスのソース量がすくない

デメリット

  • JSON→欲しい戻り値にするメソッドとURLの対応表がどこかに必要でソースから追うことができない
  • 上記が必要なので最初とっつきにくそう

2. 1つのAsyncTaskLoaderを使い戻り値は総称型にする

AsyncTaskLoader内の処理はIDで分ける

メリット

  • AsyncTaskLoaderを作った人が意図した使い方のような気がする。

デメリット

  • どんなObjectが返ってくるのか調べるために通信側のソースまたは他の呼び出し部分を参考にする必要がある。

3. 各通信毎にAsyncTaskLoaderを用意する

メリット

  • 作りが単純
  • どんな戻り値が返ってくるのか明確

デメリット

  • Loaderクラスの数がかなり多くなる
  • 似たソースがかなり多くなってしまう

4. 通信クラスを作って各通信毎にメソッドを用意。戻り値は各通信のメソッド毎にインターフェースを用意する。内部の実装はAsyncTaskLoader

非同期で結果を受け取る方法
http://qiita.com/ux_design_tokyo/items/2c742c792093bc607be6

ActivityまたはFragmentではなく通信クラスをAsyncTaskLoaderのコールバック先にする。

メリット

  • どんな戻り値が返ってくるのか明確

デメリット

  • インターフェースを各メソッド毎に書くので少しソース量が多くなる

どの方法で実装する?

ソースは若干増えますが、メソッドを使う側がわかりやすい4で実装してみようと思います。

実際に実装してみました

15
15
10

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
15