Ich habe eine Aktivität mit einem XML-Layout, in das eine WebView eingebettet ist. Ich verwende das WebView überhaupt nicht in meinem Aktivitätscode. Es befindet sich lediglich in meinem XML-Layout und ist sichtbar.
Wenn ich die Aktivität beende, stelle ich fest, dass meine Aktivität nicht aus dem Speicher gelöscht wird. (Ich überprüfe über hprof dump). Die Aktivität wird jedoch vollständig gelöscht, wenn ich das WebView aus dem XML-Layout entferne.
Ich habe es schon versucht
webView.destroy();
webView = null;
in onDestroy () meiner Aktivität, aber das hilft nicht viel.
In meinem hprof-Dump hat meine Aktivität (mit dem Namen 'Browser') die folgenden verbleibenden GC-Wurzeln (nachdem ich sie aufgerufen destroy()
habe):
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]
Ich habe festgestellt, dass ein anderer Entwickler ähnliche Erfahrungen gemacht hat. Siehe die Antwort von Filipe Abrantes unter: http://www.curious-creature.org/2008/12/18/avoid-memory-leaks-on-android/
In der Tat ein sehr interessanter Beitrag. Vor kurzem fiel es mir sehr schwer, einen Speicherverlust in meiner Android-App zu beheben. Am Ende stellte sich heraus, dass mein XML-Layout eine WebView-Komponente enthielt, die, selbst wenn sie nicht verwendet wurde, verhinderte, dass der Speicher nach Bildschirmrotationen / App-Neustart gesammelt wird. Ist dies ein Fehler der aktuellen Implementierung oder gibt es etwas? spezifisch, dass man tun muss, wenn man WebViews verwendet
Leider gibt es im Blog oder in der Mailingliste noch keine Antwort auf diese Frage. Daher frage ich mich, ob dies ein Fehler im SDK ist (möglicherweise ähnlich dem MapView-Fehler, wie unter http://code.google.com/p/android/issues/detail?id=2181 gemeldet ) oder wie die Aktivität vollständig abgerufen werden kann aus dem Speicher mit einer eingebetteten Webansicht ?