声に出して読みたいObjective-Cのライブラリ8種(2014.7) に触発されて書いてみます。
今回は Square 社製ライブラリを見ていきます。
Picasso
安心と信頼の Square 社製のライブラリです。画像のローディングとキャッシュについて面倒を見てくれますが、画像の加工についても扱っています。
Context
、多くの場合Activity
のライフサイクルに合わせて画像の読み込みを管理したり、AdapterView
の中にあっては、View
のリサイクルをハンドリングして、画像のロードをキャンセルしたりもしてくれます。
Transformation
インタフェースを実装し、そのロジックを渡すことで、画像の加工もできます。
処理の始まりはPicasso
クラスから。Picasso#with(Context)
で自動的にオブジェクトの初期化がはじまり(まだの場合)、続けてどこから画像を読み込むかや、プレースホルダの設定、加工処理の有無などのRequest
オブジェクトの生成を経て(RequestCreator
)、最終的に、同期的にBitmap
を取得するか、非同期的にBitmap
をどこかにアサインするかをget()
またはinto(Target)
、into(ImageView)
を呼び出すことで、リクエストが始まります。
Picasso
自体もビルダが用意されており、アプリごとにキャッシュサイズの変更などといった設定を変えることができます。
使い方はこちらが詳しいです。
Dagger
安心と信頼の Square 社製のライブラリです。Google も注目している DI コンテナで、Guice のように実行時に依存グラフを解決するのではなく、コンパイル時に依存グラフを解決するのが特徴です。
フィールドインジェクション、コンストラクタインジェクションに対応しており、JSR-330 で定義されたアノテーション(javax.inject.Inject
、javax.inject.Singleton
、javax.inject.Named
など)を用いるため、他の DI コンテナからの移行も難しくありません。
依存関係を宣言するのは@Module
アノテーションが付与されたクラスです。このクラスで宣言された依存関係を元に、オブジェクトの注入をするのはObjectGraph
クラスです。
Retrofit
安心と信頼の Square 社製のライブラリです。REST クライアントを生成する、ボイラプレートなコードをまとめて管理してくれます。
REST リクエストを飛ばしてレスポンスを得て、Entity の型へ変換するまでの面倒を見てくれます。開発者は、REST のエンドポイントと、リクエストを投げる際に呼び出すメソッド、返り値の型を interface
として宣言し、RestAdapter#create(Class<?>)
にそのインタフェースのクラスクラスを渡すだけで、REST クライアントが完成します。あとは、インタフェースに定義したメソッドを呼び出すだけで、必要な処理が実行され、レスポンスを得ることになります。
エンドポイントごとの設定は、アノテーションによって実現できます。例えば、POST
やGET
などのメソッドの設定はそれぞれアノテーションが用意されていますし、HTTP ヘッダもアノテーションによって宣言することができます。
この他、RestAdapter
がすべての設定を管理しているので、このオブジェクトに好きな設定を渡すことで、振る舞いを変えることもできます。
使い方はこちら。
otto
安心と信頼の Square 社製のライブラリです。Guava にある EventBus を元に、Android 向けの拡張のあるものです。
Bus
クラスが中心となり、様々なクラスがコミュニケーションをとるためのインタフェースを提供しています。
コミュニケーションを発信する側は、Bus#post(Object)
を用いて、発信に使うオブジェクトを渡します。
コミュニケーションを受信する側は、Bus#register(Object)
で受信の準備をし、Bus#unregister(Object)
で受信を取りやめることができます。Android の場合、Activity
やService
などライフサイクルがあるコンポーネントが多く、ライフサイクルが終わるタイミングでBus#unregister(Object)
をすることになります。
よく、コールバックインタフェースの代替として用いられます。モデルに非同期な処理を依頼し、その結果をイベントとして受け取ったり、UI で起こる各種のイベントを通知するために使ったりします。
インタフェースによる、直接の依存関係がなくなることで、モジュールの切り替えが容易になる一方で、インタフェースを定義して型による実装の強制が無くなるので、実装漏れがあってもコンパイル時に気が付けないという面があります。
使い方はこちらが詳しいです。
okhttp
安心と信頼の Square 社製のライブラリです。
HttpUrlConnection 等のような低レイヤな部分のライブラリで、Http 通信に関する部分の面倒をよく見てくれます。また、SPDY にも対応しています。
よくある問題として、コネクションの確立がうまくいかない場面があります。この時、okhttp では、自動的に代替となる接続先へと切り替えてくれます。
また、通信に関して、キャッシュを活用した通信回数の削減や、GZIP 圧縮、コネクションプールを活用して遅延を削減するなどの工夫も含まれています。
最近では、Android L Preview にも okhttp が使われていることが判明し、Google も注目しているようです(おもいっきり事故っていましたが…)。
使い方はこちらが詳しいです。