1

ほとんどが特定のビジネスのディレクトリになる小さなアプリを構築しています。すべては REST サービスを通じて取得されます。ビジネスのリストを閲覧しているときに、画像の処理に問題があります。

各リスト項目を構成する画像は、背景 (ビジネスの「バナー」として機能) と、ビジネスが提供する最も重要なサービスを表す最大 5 つの小さなアイコンです。

私は Picasso を使用してこれらの画像を非同期的にロードし始めました。これは、独自のキャッシュを作成しないようにするためです。ただし、いくつかの問題が発生しました。

A) 最大の問題は、ローエンドの電話 (Android 2.2 を実行している LG Optimus V) で、背景/バナーが常にロードに失敗することです。背景の読み込みに失敗したときに Picasso の error() オプションを使用してプレースホルダー ドローアブルを読み込みますが、すべての背景が読み込みに失敗し、その理由がわかりません。これについて私が気づいたこと:

  • 小さなアイコンは問題なく読み込まれます
  • Picasso からの onImageLoadFailed コールバックは、実際にはトリガーされません。しかし、error() で指定したプレースホルダーは読み込まれます。
  • リモートではなくローカルにある場合、これらのバナー (同じアセット サイズ) を完全にロードできるため、メモリは問題ではないようです。
  • この問題は、2.3 を実行している Droid X といくつかのハイエンド デバイスでは発生しません。

B) すべてのデバイスで、サービス アイコンもバナーもディスクにキャッシュされないように見えます (Picasso デバッグ モードでは、常に最初にリモート ソースから読み込まれ、その後メモリから読み込まれることを示します)、Picasso はこれを自動的に行うことになっています。設定が不足しているかどうかはわかりません。

実際、サービス アイコンは、リスト (ビジネス) アイテム間で頻繁に繰り返されるため、アプリの開始時にプリフェッチできれば最適です。可能なサービスのリストはいつでも増加する可能性があり、そのため、より多くのアイコンが定期的に発生するため、ローカル アセットにすることはできません。しかし、アクティビティの開始時に、サービスのリストを照会し (そのための REST ポイントが既にあります)、すべてのアイコンをプリフェッチしてキャッシュできれば素晴らしいと思います。これを行う「簡単な」方法はありますか?

これらの問題についてご指導いただきありがとうございます。

4

1 に答える 1

0

これに答えるのが遅れましたが、ここにあります:

A) Android 2.2 のバグのある SSL 実装の問題であることが判明しました。私の画像は、HTTPS と HTTP の両方でアクセスできます。HTTPS URL を使用していましたが、リクエストが失敗しました。HTTP URL に切り替えただけで、2.2 ですべてが正常に機能し始めました。

B) ピカソのデバッグ モードにバグがあったのか、それとも何だったのか、これが本当かどうかを正確に知ることはできませんでした。さらにテストを行ったところ、アプリのキャッシュ ストレージが時間の経過とともに増加していることに気付きました (つまり、より多くの画像がより頻繁にアクセスされるため)。これは、キャッシュが関係していることを示しています。ただし、キャッシュされた画像ファイルの代わりにキャッシュされた HTTP 応答である可能性があると思います。これは、Picasso のデバッグ モードがソースから要求されていることを示したにもかかわらず、キャッシュされているかのようにすばやく表示された理由を説明します。

于 2014-08-03T18:24:32.063 に答える