メモリの節約:Picasso vs UniversalImageLoader

こんにちはAndroid Developers!

私たちはそれぞれURLによる画像の読み込みに直面していると思います。 この問題を解決する最も簡単な方法は、既製のサードパーティライブラリを使用することです。 原則として、そのような既製のソリューションの1つは、ユニバーサルイメージローダー(UIL)、ピカソです。 開発者にこのライブラリまたはそのライブラリを選択した理由を尋ねると、原則として異なる答えが得られます。 たとえば、「Picasso / UILにはメモリリークの問題はありません」、「Squareは正しいことだけを実行します」、または単に「はい、UILを使用すると動作します-そして良い」。

だから、私は疑問に思っていました:これらの2つのライブラリのうち、メモリを最適に使用するのはどれですか UILを使用していますが、古いデバイスのOutOfMemoryに問題があります。 おそらくピカソが治療法でしょうか?

そこで、このベンチマークのアイデアが現れました。





テストの目的:デバイスのメモリを最小限使用するライブラリ(UILまたはPicasso) 決定する。



テストケース:

-小さな画像のダウンロード(240x240)

-大きな画像をダウンロード(任意のサイズで400ピクセル以上)

-大きな画像をダウンロードし、そのサイズをImageViewの寸法に変換します

-小さな画像をダウンロードして、丸い画像として表示します

-大きな画像をダウンロードしてRGB565構成で表示する



テスト実行テクニック:

リストとして、幅2列のGridViewを使用します。 アダプターは、テストケースごとに個別に構成されます。 アダプタに事前に準備されたURLのリストを提供するため、同じテスト条件が作成されます。

1秒の期間で、リストは1つのパスを自動的に1つ下に移動してから、4つのイメージの増分で上に移動します。 各ステップで、アプリケーションが使用するメモリが測定されます。

各テストケースについて、使用済みメモリを3段階で測定します。

-最初の実行-クリーンなアプリケーションキャッシュを使用。

-2回目の起動:最初のパスの後、アプリケーションを閉じません。

-3回目の起動-キャッシュを消去せずにアプリケーションを再度開いた後。

テストケースの最後に、キャッシュサイズをさらに書き留めました。これは、古いデバイスにとっても重要です。



ベンチマークのソースはここにあります

github.com/artemmanaenko/ImageLoadersTest プロジェクトはGradleの下でコンパイルされます。



したがって、以下は各テストケースの結果です。 Y軸-アプリケーションが使用するメモリ(MB単位)。 X軸-テストケースの時間。



小さな画像をダウンロードする


画像

キャッシュサイズ:ピカソ= 1.39 Mb、UIL = 1.17 Mb



大きな画像をダウンロードする


画像

キャッシュサイズ:ピカソ= 3.67 Mb、UIL = 5.44 Mb



ImageViewサイズに変換して大きな画像をダウンロードする


画像

キャッシュサイズ:ピカソ= 3.67 Mb、UIL = 5.44 Mb



小さな画像をダウンロードして、丸い画像にトリミングします


画像

キャッシュサイズ:ピカソ= 1.39 Mb、UIL = 1.17 Mb



大きな画像をダウンロードしてRGB565構成で表示する


画像



大きな写真を使った実験の結果に感銘を受け、UILを構成する価値があると判断しました。 キャッシュにキャッシュを大量にロードしないように、UILのRAMでキャッシュを無効にしようとしました。 そして、オプションとして、画像のキャッシュ可能なサイズを設定します-画面の半分以下です。



画像



実験に基づいて、私は次の結論を出しました。




All Articles