У мене є діяльність із використанням макета xml, де вбудовано WebView. Я взагалі не використовую WebView у своєму коді активності, все, що він робить - це сидіти там у моєму макеті xml і бути видимим.
Тепер, коли я закінчую діяльність, я виявляю, що моя діяльність не очищається з пам'яті. (Перевіряю через дамп hprof). Діяльність повністю очищена, хоча якщо я видалю WebView із макета xml.
Я вже пробував a
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 ), або як повністю отримати активність вимкнути пам’ять із вбудованим веб-переглядом ?