WebView OutOfMemoryException
Ich bin be-langen Seiten in ein WebView mit loadData(), leider nach etwa 5 oder 10 Seiten-links es gibt eine OutOfMemoryException. Dies ist wahrscheinlich verursacht durch die Geschichte hält die Daten: url auf jeder Seite.
Ich habe einen Speicher - & cpu-monitor in der Statusleiste, und es zeigt immer an, kaum Speicherverbrauch, so dass die app nicht verwenden bis alle Speicher. Gibt es eine Möglichkeit, meine app, um mehr Speicher verwenden, ähnelt der Java-command-line-switches? Gibt es eine Möglichkeit, die webview effizienter, vielleicht indem Sie einen cache auf der sd-Karte, zu verhindern, dass dieser Absturz?
06-27 12:02:44.746: WARN/System.err(6692): java.lang.OutOfMemoryError
06-27 12:02:44.746: WARN/System.err(6692): at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:97)
06-27 12:02:44.746: WARN/System.err(6692): at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:157)
06-27 12:02:44.746: WARN/System.err(6692): at java.lang.StringBuilder.append(StringBuilder.java:217)
06-27 12:02:44.746: WARN/System.err(6692): at android.webkit.BrowserFrame.startLoadingResource(BrowserFrame.java:710)
06-27 12:02:44.746: WARN/System.err(6692): at android.webkit.BrowserFrame.nativeLoadUrl(Native Method)
06-27 12:02:44.746: WARN/System.err(6692): at android.webkit.BrowserFrame.loadUrl(BrowserFrame.java:248)
06-27 12:02:44.746: WARN/System.err(6692): at android.webkit.WebViewCore.loadUrl(WebViewCore.java:1564)
06-27 12:02:44.746: WARN/System.err(6692): at android.webkit.WebViewCore.access$1400(WebViewCore.java:52)
06-27 12:02:44.746: WARN/System.err(6692): at android.webkit.WebViewCore$EventHub$1.handleMessage(WebViewCore.java:950)
06-27 12:02:44.746: WARN/System.err(6692): at android.os.Handler.dispatchMessage(Handler.java:99)
06-27 12:02:44.746: WARN/System.err(6692): at android.os.Looper.loop(Looper.java:123)
06-27 12:02:44.746: WARN/System.err(6692): at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:623)
06-27 12:02:44.746: WARN/System.err(6692): at java.lang.Thread.run(Thread.java:1096)
06-27 12:02:44.746: WARN/dalvikvm(6692): threadid=8: thread exiting with uncaught exception (group=0x40020ac0)
06-27 12:02:44.756: ERROR/AndroidRuntime(6692): FATAL EXCEPTION: WebViewCoreThread
06-27 12:02:44.756: ERROR/AndroidRuntime(6692): java.lang.OutOfMemoryError
06-27 12:02:44.756: ERROR/AndroidRuntime(6692): at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:97)
06-27 12:02:44.756: ERROR/AndroidRuntime(6692): at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:157)
06-27 12:02:44.756: ERROR/AndroidRuntime(6692): at java.lang.StringBuilder.append(StringBuilder.java:217)
06-27 12:02:44.756: ERROR/AndroidRuntime(6692): at android.webkit.BrowserFrame.startLoadingResource(BrowserFrame.java:710)
06-27 12:02:44.756: ERROR/AndroidRuntime(6692): at android.webkit.BrowserFrame.nativeLoadUrl(Native Method)
06-27 12:02:44.756: ERROR/AndroidRuntime(6692): at android.webkit.BrowserFrame.loadUrl(BrowserFrame.java:248)
06-27 12:02:44.756: ERROR/AndroidRuntime(6692): at android.webkit.WebViewCore.loadUrl(WebViewCore.java:1564)
06-27 12:02:44.756: ERROR/AndroidRuntime(6692): at android.webkit.WebViewCore.access$1400(WebViewCore.java:52)
06-27 12:02:44.756: ERROR/AndroidRuntime(6692): at android.webkit.WebViewCore$EventHub$1.handleMessage(WebViewCore.java:950)
06-27 12:02:44.756: ERROR/AndroidRuntime(6692): at android.os.Handler.dispatchMessage(Handler.java:99)
06-27 12:02:44.756: ERROR/AndroidRuntime(6692): at android.os.Looper.loop(Looper.java:123)
06-27 12:02:44.756: ERROR/AndroidRuntime(6692): at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:623)
06-27 12:02:44.756: ERROR/AndroidRuntime(6692): at java.lang.Thread.run(Thread.java:1096)
Das merkwürdige ist, DDMS Heap-Ansicht zeigt, es hatte viel von "Freien" Speicher, aber es kann noch immer zu einem Fehler wie:
ERROR/dalvikvm-heap(10612): Out of memory on a 1153232-byte allocation.
Ich weiß nicht, ob es überhaupt im Zusammenhang, aber manchmal gibt es diese Warnung beim öffnen einer Seite, bevor Sie out-of-memory:
FEHLER - /Web-Console(18033): SECURITY_ERR: DOM Exception 18: es wurde versucht, zu durchbrechen, die Sicherheitspolitik des user-agent. bei ...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie als Umsetzung onLowMemory() und mit freeMemory auf der WebView? Sie können auch clearCache. Eine andere überlegung wäre die änderung der cache-Modus.
Wechselte ich zu loadDataWithBaseURL, die nicht erforderlich ist, URLEncoder-Codierung die url und nicht halten Sie große Daten-urls in der Geschichte. Diese scheinen behoben, die hohe cpu-Nutzung und Speicher-Leck, und die SECURITY_ERR: