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

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

2 голосов
/ 14 марта 2011

Извините, если это какой-то дублирующий вопрос. Я гуглял около часа, но все еще возникают проблемы с использованием памяти компонентом WebView.

Я запускаю Activity (NewsDetail) из ListActivity, чтобы отобразить конкретную новостную статью. HTML-код статьи добавляется в WebView, который включен в макет Activity. (он также загружает 1 или 2 изображения через newsDetail.loadDataWithBaseURL () )

Я начинаю статью Активность через:

Intent i = new Intent(getApplicationContext(), NewsDetail.class);  
i.putExtra("position", position);
startActivity(i);

После прочтения этого вопроса я изменил свой макет так, чтобы добавить программный WebView:

newsDetail = new WebView(getApplicationContext());

В моем методе onDestroy установлено:

public void onDestroy(){
    super.onDestroy();
    newsDetail.destroy();
    newsDetail = null;
    finish();
    System.gc();
}

Через некоторое время сборщик мусора уменьшит объем памяти примерно с 4 МБ до 2 МБ. Если я открываю / закрываю несколько новостных статей, он достигает критического размера кучи. : /

Как уже упоминалось, после уничтожения действия, оставшемуся 2 МБ осталось для действия (которого не будет, если я полностью удалю WebView из кода). Так что, похоже, что это связано с самим WebView. Здесь упоминается та же проблема .

Я также установил:

android:noHistory="true"

Кто-нибудь из вас задумывался, как полностью избавиться от использования памяти в "NewsDetail" Activity после возвращения к моей ListActivity? Был бы рад услышать любые идеи, это сводит меня с ума. Существует ли диаграмма для телефонов Android с размером кучи более 16 МБ?

Ответы [ 3 ]

3 голосов
/ 14 марта 2011

Я думаю, что это известная ошибка. Пожалуйста, обратитесь к этому официальному http://code.google.com/p/android/issues/detail?id=2137

Вы можете обратиться по этой ссылке, чтобы сообщить, что это известная проблема или что-то подобное

1 голос
/ 04 ноября 2011

Существует ссылка mParent, которая указывает на ViewGroup, которая содержит WebView, и в конечном итоге на вашу активность.WebView пропускает все, что может достать, поэтому вы должны удалить его из иерархии представлений.

Смотрите мой ответ здесь:

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

0 голосов
/ 13 июня 2016

Если ваш onDestroy находится в активности newsDetail, это своего рода странный код.Сначала вы делаете super.onDestroy(), который должен делать то, что вы хотите, чтобы объект был помечен для GC.Но в строке после ссылки на тот же объект.Я не эксперт, но это может вызвать проблемы.

Если метод onDestroy находится внутри вашего listActivity, то имеет смысл, что он не работает, потому что метод никогда не вызывается как listActivityостается открытым, в то время как другие newsDetails открыты.

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