Утечка памяти в Android WebView при использовании ресурсов - PullRequest
6 голосов
/ 14 февраля 2012

Я недавно заметил, что когда я загружаю из файла код, основанный на веб-просмотре (используя ресурсы или локальный каталог), при вызове метода destroy () WebView будет терять память.Я сузил это до ссылочной проблемы.Программа / веб-просмотр делает копии исходного представления и теряет ссылки в таблице JNI - это в конечном итоге приводит к аварийному завершению работы программы после 512 записей.

Я видел эту статью, но исправление непротекающего веб-просмотра делаетне похоже на работу с HTML в ресурсах или внешних папках.

Утечка памяти в WebView

Проблема не существует, когда приложение полностью основано на сервере;но мне нужно, чтобы приложение могло "синхронизировать" данные и обновлять офлайн-репо с этими представлениями.

Дополнительная информация: я взял веб-просмотры и поместил их в ViewPager для прокрутки.Эта проблема не существовала в 3.2.4 / 1, но появилась в 4.0.3.Я получаю много предупреждений JNI (не удалось найти запись), и они все еще существуют после уничтожения представлений.Я посмотрел на него через hprof и заметил, что HTML остается в потерянных переменных.

Буду признателен за любую информацию о том, как исправить это поведение.

Редактировать:

Сведения о сбое

Failed adding to JNI local ref table (has 512 entries)
"Thread-375" prio=5 tid=15 RUNNABLE
| group="main" sCount=0 dsCount=0 obj=0x41504a90 self=0x1a9cf80
| sysTid=10314 nice=0 sched=0/0 cgrp=default handle=27159240
| schedstat=( 455083000 66745000 774 ) utm=30 stm=15 core=3

at android.content.res.AssetManager.readAsset(Native Method)
at android.content.res.AssetManager.access$700(AssetManager.java:35)
at android.content.res.AssetManager$AssetInputStream.read(AssetManager.java:573)
at dalvik.system.NativeStart.run(Native Method)

ОБНОВЛЕНИЕ:

Чтобы устранить эту проблему, необходимо загрузить с SD-карты иликакой-то другой механизм хранения.Ошибка постоянна при загрузке файла Javascript, я не знаю, исправлен ли он в Chrome, но, похоже, он не исправлен в браузере в новейшей ОС.

1 Ответ

1 голос
/ 27 сентября 2013

.destroy () -> Уничтожает внутреннее состояние этого WebView.Этот метод следует вызывать после удаления этого WebView из системы просмотра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...