2016-07-15 11 views
0

私は、Androidアプリケーションターゲティング=> APIを設計しています。17. AsyncTaskを拡張し、文字列(URL)とImageViewを引数として受け取るクラスDownloadImageTaskを作成しました。その中で、HTTP接続を開き、URLからイメージをダウンロードし、BitmapFactoryを使用してデータからビットマップオブジェクトを作成し、ビットマップをImageViewに設定しています。最終的な結果は、ユーザがスクロールするために利用可能なデータの人口的なリストであり、可能なかぎり画像が入力される。多数のAsyncTaskインスタンスの生成 - 影響?

これは表面上のデザインが優れているように見えますが、私は自分のアプリをOOM条件やユーザーエクスペリエンスルール違反の危険にさらしていることに懸念しています。私はこれを設計した方法が正しいのか、そうでないのか、私はこれにどのようにアプローチすべきかを知りたい。

ご協力いただきありがとうございます。独自のアプローチに

+3

はい。これは非常に問題の影響を受けやすく、Picasso、Universal Image Loader、これらのhttps://android-arsenal.com/tag/46などの画像ライブラリではかなり問題が解決されています。 – DeeV

+0

問題を実際に実行するには、適切な数のイメージを管理するか、スケーリングを適切に処理しない必要がありますが、大規模なチームがこれだけのチューニングに費やしたライブラリの1つを調べる必要があります。グライドもまた良いものです。 – zgc7009

答えて

1

二つの考慮事項:

  1. そのように、あなたのビューとあなたのサービス層を結合しているので、あなたは非同期タスクにImageViewのを渡すべきではありません。したがって、非同期タスクにURLを送り、onPostExecuteメソッドを呼び出すことでActivityにupdateView(または同様の)メソッドを実装します。
  2. あなたのOOMについて、あなたは正しいです。必要以上の解像度を持つオリジナルのビットマップを使用すると問題が発生する可能性があります。したがって、保存している画像を縮小してください。

いくつかの画像を使用すると最後の問題は問題にならない場合があります。ですから、たくさんの画像を扱い、独自のバージョンを実装する必要がない場合は、既存のライブラリを見てください。いくつかは、すでに言及されている:

+1

ここでのアドバイスに基づいて、プロジェクトからAsyncTaskを削除し、Glideに置き換えました。これは私のUIを私のサービス層から切り離すだけでなく、他の素晴らしい機能もたくさん提供します。ご意見ありがとうございました。 – Joel

関連する問題