loadData()を使用してWebViewに長いページを読み込んでいますが、残念なことに5〜10ページのリンクのあとでOutOfMemoryExceptionが発生します。これは、すべてのページのURL:完全なデータを保持している履歴が原因である可能性があります。WebView OutOfMemoryException
私はステータスバーにメモリ&cpuモニタを持っており、常にメモリ使用量はほとんどないので、アプリケーションはすべてのメモリを使い果たしていません。 Javaのコマンドラインスイッチと同様に、私のアプリがより多くのメモリを使用できるようにする方法はありますか?このクラッシュを防ぐために、おそらくSDカードにキャッシュを作成することで、Webビューをより効率的にする方法はありますか?
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)
奇妙なことは、DDMSヒープビューは、それが「無料」のメモリをたくさん持っていた示しているが、それはまだのようなエラーを与えることがあります。それはATの場合
ERROR/dalvikvm-heap(10612): Out of memory on a 1153232-byte allocation.
私は知りませんすべてが関連していますが、メモリを解放する前にページを開くときにこの警告が表示されることがあります。セキュリティ/ ERROR:DOM例外18:セキュリティポリシーを破りました。ユーザエージェント。 ...
を、それも記録しませんでした。ドキュメントによると、「全体的な*システム*のメモリが不足しているときに呼び出されます...」 – NoBugs
キャッシュモードをLOAD_NO_CACHEに設定しても、どちらも修正されません。 – NoBugs
ここでの推奨事項を見てください:http://stackoverflow.com/questions/2881139/outofmemoryerror-what-to-increase-and-how StringBuilderを構築しているように見えますが、これはHeapサイズを破る可能性があります。問題の一部のみ –