У меня есть действие с использованием макета xml, в который встроен WebView. Я вообще не использую WebView в своем коде активности, все, что он делает, находится в моем макете xml и является видимым.
Теперь, когда я заканчиваю упражнение, я обнаруживаю, что мои действия не стираются из памяти. (Проверяю через дамп hprof). Однако активность полностью очищается, если я удалю WebView из макета xml.
Я уже пробовал
webView.destroy();
webView = null;
в onDestroy () моей деятельности, но это мало помогает.
В моем дампе hprof моя активность (названная 'Browser') имеет следующие оставшиеся корни GC (после вызова destroy()
на нем):
com.myapp.android.activity.browser.Browser
- mContext of android.webkit.JWebCoreJavaBridge
- sJavaBridge of android.webkit.BrowserFrame [Class]
- mContext of android.webkit.PluginManager
- mInstance of android.webkit.PluginManager [Class]
Я обнаружил, что другой разработчик испытал подобное, см. Ответ Филипе Абрантеса на: http://www.curious-creature.org/2008/12/18/avoid-memory-leaks-on-android./
Действительно очень интересный пост. Недавно мне было очень сложно устранить утечку памяти в моем приложении для Android. В конце концов выяснилось, что мой xml-макет включал компонент WebView, который, даже если он не использовался, предотвращал сбор памяти после поворота экрана / перезапуска приложения ... это ошибка текущей реализации или есть что-то конкретно, что нужно делать при использовании WebViews
К сожалению, на этот вопрос в блоге или в списке рассылки пока нет ответа. Поэтому мне интересно, это ошибка в SDK (возможно, похожая на ошибку MapView, о которой сообщалось http://code.google.com/p/android/issues/detail?id=2181) или как полностью удалить активность из памяти с помощью встроенного веб-просмотра strong >?