1

XML フィード (ニュース付き) を解析し、解析されたデータ (テキストと画像の URL) をギャラリー ウィジェット内の WebView に読み込むアクティビティがあります。

このようなもの:

mimeType = "text/html";

encoding = "utf-8";

String html = "<img src=\""
+ newsImageUrl.get(position)
+ "\" style=\"max-width:200px; max-height:200px;\" align=\"left\""
+ "/>" + newsDescription.get(position);

data.loadDataWithBaseURL("", html, mimeType, encoding, "");

すべて正常に動作しますが、ニュース フィード内にこの BIG IMAGES がある場合があります。まあ、あなたが電話を回転させ始めない限り、彼らは何の問題も引き起こしません. そして、いくつかの向きを変更した後、幸せな Out Of Memory 例外が発生しました。

Android では、OOM は常に Bitmas の近くのどこかに隠れています。そのため、ほとんどの人は BitmapFactory を inSampleSize で使用するか、よりエキゾチックなものを使用します。おそらく、画像をダウンロードして再サンプリングし、SD カードからロードするだけです。しかし、今のところ私はそれを避けようとします。

とにかく、問題は - WebView にロードされているときに大きな画像をどうするかということです。サイズを変更する方法はありますか (視覚的にだけではありません)。WebView onOrientationChange によって占有されているメモリをクリアする方法はありますか (webview.freeMemory() は実際には役に立ちません)。

4

2 に答える 2

3

実際には、それほど多くの選択肢はありません。画像がまだメモリに割り当てられており、画像が大きすぎて収まらないため、メモリを解放しても役に立ちません。

唯一の実行可能な方法は、ソースでサイズを縮小することです (この方法では、プログラムで何もする必要はありません)、またはダウンロード時に、表示する前にサイズを縮小します (SD に縮小して保存し、代わりにこれらのローカル コピーを表示します)。ソース画像)。

これは、ある時点でフルスケールの画像を使用する必要があるかどうかによって異なります。そうでなければ、それらをそれほど大きくしておく意味はまったくありません。

于 2011-08-29T08:05:56.963 に答える
0

とにかく、問題はwebviewの大きな画像にはありませんでした。

アプリを縮小しましたが、ギャラリー ウィジェットのデザインに問題があったようです。それを囲むグラフィカルインターフェイス要素でより具体的にする。カップルの向きが変わった後、ギャラリーが空でも、うまくいきました。

そして、その理由を今日やっと見つけました。すべての画像を mdpi にダウンスケールする /drawables/ フォルダーを使用しました。そして、私がテストしたすべての電話は hdpi でした。どうやらアンドロイドはそれほど効率的なスケーリング方法を使用していないようで、どこかでリークしています。

すべてのドローアブルを hdpi および mdpi フォルダーに移動すると、クラッシュが魔法のように停止しました。

したがって、結論 - /drawables/ フォルダーの使用は避けてください。

于 2011-09-08T03:28:56.317 に答える