Большие изображения в WebView вызывают нехватку памяти - PullRequest
1 голос
/ 29 августа 2011

У меня есть действие, которое анализирует 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, "");

Все отлично работает, но иногда в новостной ленте есть БОЛЬШИЕ ИЗОБРАЖЕНИЯ. Ну, они не вызывают никаких проблем, если вы не начнете вращать телефон. И после нескольких изменений ориентации у нас есть счастливое исключение Out Of Memory.

Ну, в Android OOM всегда прячется где-то рядом с Bitmas, поэтому большинство людей используют BitmapFactory с inSampleSize или что-то более экзотическое. Ну, предположительно, я могу загружать и повторно пробовать изображения, а затем просто загружать их с SD-карты. Но сейчас я постараюсь избежать этого.

В любом случае, вопрос - что делать с большими изображениями, когда они загружаются в WebView? Есть ли способ изменить их размер (не только визуально)? Есть ли способ очистить память, занятую WebView onOrientationChange (webview.freeMemory () на самом деле не помогает).

Ответы [ 2 ]

3 голосов
/ 29 августа 2011

На самом деле, у вас не так много вариантов.Освобождение памяти не помогает, поскольку ваши изображения по-прежнему размещаются в памяти, а изображения слишком велики, чтобы уместиться.

Единственный реальный способ - уменьшить их размер либо у источника (таким образом, у вас ничего нетделать программно) или во время загрузки, перед тем, как вы их отобразите (вы сохраняете их в уменьшенном виде на SD и отображаете эти локальные копии вместо исходных изображений).

Это зависит от того, нужно ли вам использоватьполномасштабные изображения в какой-то момент.Если нет, то абсолютно бессмысленно держать их такими большими.

0 голосов
/ 08 сентября 2011

Во всяком случае, проблема не в больших изображениях в веб-просмотре.

Я уменьшил масштаб приложения, и, видимо, проблема была в дизайне моего виджета галереи. Чтобы быть более конкретным в графических элементах интерфейса, которые его окружают. Даже с пустой галереей после изменения ориентации пары я получил oom.

И я нашел причину этому только сегодня. Я использовал / drawables / folder, которая уменьшает все изображения до mdpi. И все телефоны, на которых я это тестировал, были hdpi. Очевидно, Android использует какой-то не очень эффективный метод масштабирования, и где-то там течет.

Я переместил все свои чертежи в папки hdpi и mdpi, и сбои волшебным образом прекратились.

Итак, вывод - избегайте использования папки / drawables /.

...