Help us understand the problem. What is going on with this article?

声に出して読みたい Android のライブラリ - その1

More than 5 years have passed since last update.

声に出して読みたいObjective-Cのライブラリ8種(2014.7) に触発されて書いてみます。


今回は Square 社製ライブラリを見ていきます。

Picasso

https://github.com/square/picasso/

安心と信頼の Square 社製のライブラリです。画像のローディングとキャッシュについて面倒を見てくれますが、画像の加工についても扱っています。

Context、多くの場合Activityのライフサイクルに合わせて画像の読み込みを管理したり、AdapterViewの中にあっては、Viewのリサイクルをハンドリングして、画像のロードをキャンセルしたりもしてくれます。

Transformationインタフェースを実装し、そのロジックを渡すことで、画像の加工もできます。

処理の始まりはPicassoクラスから。Picasso#with(Context)で自動的にオブジェクトの初期化がはじまり(まだの場合)、続けてどこから画像を読み込むかや、プレースホルダの設定、加工処理の有無などのRequestオブジェクトの生成を経て(RequestCreator)、最終的に、同期的にBitmapを取得するか、非同期的にBitmapをどこかにアサインするかをget()またはinto(Target)into(ImageView)を呼び出すことで、リクエストが始まります。

Picasso自体もビルダが用意されており、アプリごとにキャッシュサイズの変更などといった設定を変えることができます。

使い方はこちらが詳しいです。

Dagger

https://github.com/square/dagger

安心と信頼の Square 社製のライブラリです。Google も注目している DI コンテナで、Guice のように実行時に依存グラフを解決するのではなく、コンパイル時に依存グラフを解決するのが特徴です。

フィールドインジェクション、コンストラクタインジェクションに対応しており、JSR-330 で定義されたアノテーション(javax.inject.Injectjavax.inject.Singletonjavax.inject.Namedなど)を用いるため、他の DI コンテナからの移行も難しくありません。

依存関係を宣言するのは@Moduleアノテーションが付与されたクラスです。このクラスで宣言された依存関係を元に、オブジェクトの注入をするのはObjectGraphクラスです。

Retrofit

https://github.com/square/retrofit

安心と信頼の Square 社製のライブラリです。REST クライアントを生成する、ボイラプレートなコードをまとめて管理してくれます。

REST リクエストを飛ばしてレスポンスを得て、Entity の型へ変換するまでの面倒を見てくれます。開発者は、REST のエンドポイントと、リクエストを投げる際に呼び出すメソッド、返り値の型を interface として宣言し、RestAdapter#create(Class<?>)にそのインタフェースのクラスクラスを渡すだけで、REST クライアントが完成します。あとは、インタフェースに定義したメソッドを呼び出すだけで、必要な処理が実行され、レスポンスを得ることになります。

エンドポイントごとの設定は、アノテーションによって実現できます。例えば、POSTGETなどのメソッドの設定はそれぞれアノテーションが用意されていますし、HTTP ヘッダもアノテーションによって宣言することができます。

この他、RestAdapterがすべての設定を管理しているので、このオブジェクトに好きな設定を渡すことで、振る舞いを変えることもできます。

使い方はこちら

otto

https://github.com/square/otto

安心と信頼の Square 社製のライブラリです。Guava にある EventBus を元に、Android 向けの拡張のあるものです。

Busクラスが中心となり、様々なクラスがコミュニケーションをとるためのインタフェースを提供しています。

コミュニケーションを発信する側は、Bus#post(Object)を用いて、発信に使うオブジェクトを渡します。

コミュニケーションを受信する側は、Bus#register(Object)で受信の準備をし、Bus#unregister(Object)で受信を取りやめることができます。Android の場合、ActivityServiceなどライフサイクルがあるコンポーネントが多く、ライフサイクルが終わるタイミングでBus#unregister(Object)をすることになります。

よく、コールバックインタフェースの代替として用いられます。モデルに非同期な処理を依頼し、その結果をイベントとして受け取ったり、UI で起こる各種のイベントを通知するために使ったりします。

インタフェースによる、直接の依存関係がなくなることで、モジュールの切り替えが容易になる一方で、インタフェースを定義して型による実装の強制が無くなるので、実装漏れがあってもコンパイル時に気が付けないという面があります。

使い方はこちらが詳しいです。

okhttp

https://github.com/square/okhttp

安心と信頼の Square 社製のライブラリです。

HttpUrlConnection 等のような低レイヤな部分のライブラリで、Http 通信に関する部分の面倒をよく見てくれます。また、SPDY にも対応しています。

よくある問題として、コネクションの確立がうまくいかない場面があります。この時、okhttp では、自動的に代替となる接続先へと切り替えてくれます。

また、通信に関して、キャッシュを活用した通信回数の削減や、GZIP 圧縮、コネクションプールを活用して遅延を削減するなどの工夫も含まれています。

最近では、Android L Preview にも okhttp が使われていることが判明し、Google も注目しているようです(おもいっきり事故っていましたが…)。

使い方はこちらが詳しいです。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away