Androidの画像表示にライブラリ Picasso を使ってみた。
Androidアプリの開発でサーバー上にある画像を表示する処理って結構頻繁に使うのに鬼門だったりします。
一番多いのはOutOfMemory でしょう。大きい画像を2枚読み込んだだけで死んでしまう事すらあります。
そのためにrecycleメソッドを適切に呼び出したりなんやかんや工夫しないといけません。
またキャッシュ機能の実装も考えないといけません。SoftReference にするとすぐキャッシュが切れるので例えばローカルにファイルを作ったりあれこれ対策をします。
ネットワーク通信はバックグラウンドでViewとは別に処理をするのは当たり前ですが、例えば王道のAsyncTaskを使うと128個の上限に当たって
java.util.concurrent.RejectedExecutionException: pool=128/128
なんてエラーで止まってしまう事もあります。
尚且つ高速に処理しないといけないのでThreadを切りまくったり、色々ややこしくなります。
個人的に開発しているtwitterクライアントですが、近年サムネイル表示が普通になってきたために画像処理が増えパフォーマンス面で納得できていない部分がありました。
昔ならAndroidならjavaだから幾多のライブラリが使えるって感じでしたが、今はAndroid用のライブラリが沢山用意されています。
画像処理なんて誰もが楽したい部分なので何か良いライブラリがあるのかな?と思っていましたが結構ありました。色々試してみましたが、その中でも個人的に良いと思ったのが
Picasso です。
今までの苦労はなんだったのか?と思うぐらいのシンプルさと処理のスムーズさ。当然キャッシュも実装。神だと思いました。
使い方はこんな感じ
ImageView imageView = (ImageView) view.findViewById(R.id.icon);
String imageUrl = “どっかのネットワーク上の画像”
Picasso.with(getContext()).load(imageUrl).into(imageView);
個人的には車輪の再発明は知識を得るためにそこまでアホとも思いませんが、めちゃくちゃ便利な世の中になったものだと思います。良いライブラリをいかに見つけられるか?そして知っているか?で開発速度もアプリの品質も大きく変わってくる世の中なのでしょうね。
おかげでソニタブッター For Small App はソースも非常にシンプルになり尚且つ高速に動作するようになりました。
コメント
コメントを投稿