2

私の問題はメモリに関するものです。URLのリストを提供するWebサービスがあります。各URLは大きな画像に対応しています。私のモバイルアプリは、Webサービスによって提供されるxmlを解析し、GridViewにこれらの画像を表示する必要があります。次のような画像を表示するために、いくつかの機能を試しました。

  • マルチスレッド

  • 遅延読み込み

  • inSampleSizeを使用して画像サイズを縮小します(これにより、アプリに時間がかかりすぎます)

大きな画像ごとにサムネイル画像を添付し、Webサービスにすべてのサムネイルのリストを返してもらい、その後、これらのサムネイルをユーザーに表示する必要があります。ユーザーがそれらの1つをクリックすると、表示する必要があります。別のビューに大きな画像があります。1つの画像を表示したときにoutofMemory例外が発生しないことに気付いたので、このアイデアがあります。

これは信頼できるソリューションですか?より良い方法はありますか?

4

1 に答える 1

5

Androidで最も難しい問題の1つへようこそ。まず、グーグルがビットマップの処理方法について書いたこの新しいドキュメントを読むことから始めます。簡単な読み物ではありませんが、おそらく最後まで読む必要があります。数週間しか稼働していないので、見たことがないかもしれません。マルチスレッド、遅延読み込み、ダウンサンプリングなど、あなたが言及した多くのことを詳しく説明します。また、画像キャッシュの使用をお勧めします。

各画像の大きな画像をダウンロードしてからダウンサンプリングすると、非常に非効率になります。まず、ダウンロードサイズが必要以上に大きくなっています。次に、ダウンサンプルを実行するためにメモリにロードする必要があり、3番目のダウンサンプリングはやや遅いです。

Web APIから、ビューが画面に表示されたときに怠惰にダウンロードしてキャッシュを使用してしばらく保持できるサムネイルURLと完全な画像URLのリストを返してもらいます。サムネイルのサイズもダウンサンプリングしてください。次に、ユーザーが画像をクリックすると、画像全体をダウンロードし、画像が到着したら背景にサンプルを表示してから表示します。

于 2012-06-09T22:58:23.390 に答える