У меня есть активность с использованием xml-макета, где встроен WebView. Я вообще не использую WebView в своем коде активности, все, что он делает, сидит там в моем макете xml и видимо.
Теперь, когда я закончу действие, я обнаружил, что моя активность не очищается от памяти. (Я проверяю с помощью hprof дампа). Активность полностью очищается, хотя если я удалю WebView из макета xml.
Я уже пробовал
webView.destroy();
webView = null;
в onDestroy() моей активности, но это мало помогает.
В моем дампе hprof моя активность (с именем "Браузер" ) имеет следующие оставшиеся корни 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 компонент, который, даже если не использовался, был предотвращение памяти g-собранный после вращения экрана/приложения перезагрузка... это ошибка текущего реализации, или есть что-то которые нужно делать, когда с помощью WebViews
Теперь, к сожалению, в блоге или списке рассылки по этому вопросу еще не было ответа. Поэтому мне интересно, это ошибка в SDK (возможно, похожая на ошибку MapView, как сообщалось http://code.google.com/p/android/issues/detail?id=2181) или как полностью исключить активность из памяти с помощью встроенного webview?