2016-01-20 155 views
3

使用我的webView加載url時,應用程序在幾秒鐘後崩潰(沒有錯誤日誌...)。Android WebView:加載網址後崩潰

我的代碼:

wv = new WebView(this); 
     wv.clearCache(true); 
     wv.clearHistory(); 
     wv.getSettings().setJavaScriptEnabled(true); 
     wv.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 

     wv.setDownloadListener(new DownloadListener() { 
      @Override 
      public void onDownloadStart(String url, String userAgent, 
             String contentDisposition, String mimetype, long contentLength) { 
       Intent intent = new Intent(Intent.ACTION_VIEW); 
       intent.setType(mimetype); 
       intent.setData(Uri.parse(url)); 
       startActivity(intent); 
      } 
     }); 


     wv.setWebViewClient(new WebViewClient() { 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 

       // TODO change for other domains 
       URL nextUrl; 
       try { 
        nextUrl = new URL(url.toString()); 
       }catch (MalformedURLException e){ 
        nextUrl = null; 
       } 

       if(nextUrl !=null && nextUrl.getHost().toString().equals(DOMAIN)) { 
        Toast.makeText(mContext, nextUrl.getHost().toString(), Toast.LENGTH_SHORT).show(); 
        view.loadUrl(url); 
        return false; 

       }else{ 
        Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
        startActivity(browserIntent); 
        return true; 
       } 

      } 
     }); 

     wv.setWebChromeClient(new WebChromeClient() { 
      public void onProgressChanged(WebView view, int progress) { 
       MainActivity.this.setProgress(progress * 1000); 
      } 
      public boolean onConsoleMessage(ConsoleMessage cm) { 
       Log.d("MyProject: WebView: ", cm.message() + " -- From line " 
        + cm.lineNumber() + " of " 
        + cm.sourceId()); 
      return true; 
     } 
     }); 

     wv.loadUrl(URL); 
     setContentView(wv); 

登錄:

01-20 18:00:50.798 7233-7288/ my.appli.com I/dalvikvm﹕ "WebViewCoreThread" prio=5 tid=12 NATIVE 
01-20 18:00:50.798 7233-7288/ my.appli.com I/dalvikvm﹕ | group="main" sCount=0 dsCount=0 obj=0x419a0be0 self=0x68f6c750 
01-20 18:00:50.798 7233-7288/ my.appli.com I/dalvikvm﹕ | sysTid=7288 nice=10 sched=0/0 cgrp=apps/bg_non_interactive handle=1773204176 
01-20 18:00:50.799 7233-7288/ my.appli.com I/dalvikvm﹕ | state=R schedstat=(0 0 0) utm=2326 stm=119 core=0 
01-20 18:00:50.841 7233-7288/ my.appli.com I/dalvikvm﹕ #00 pc 000012a0 /system/lib/libcorkscrew.so (unwind_backtrace_thread+27) 
01-20 18:00:50.841 7233-7288/ my.appli.com I/dalvikvm﹕ #01 pc 0006235c /system/lib/libdvm.so (dvmDumpNativeStack(DebugOutputTarget const*, int)+35) 
01-20 18:00:50.841 7233-7288/ my.appli.com I/dalvikvm﹕ #02 pc 000561bc /system/lib/libdvm.so (dvmDumpThreadEx(DebugOutputTarget const*, Thread*, bool)+303) 
01-20 18:00:50.841 7233-7288/ my.appli.com I/dalvikvm﹕ #03 pc 00056256 /system/lib/libdvm.so (dvmDumpThread(Thread*, bool)+25) 
01-20 18:00:50.841 7233-7288/ my.appli.com I/dalvikvm﹕ #04 pc 000478c8 /system/lib/libdvm.so (dvmDebuggerSignalHandler(int, siginfo*, void*)+15) 
01-20 18:00:50.841 7233-7288/ my.appli.com I/dalvikvm﹕ at android.webkit.JWebCoreJavaBridge.sharedTimerFired(Native Method) 
01-20 18:00:50.841 7233-7288/ my.appli.com I/dalvikvm﹕ at android.webkit.JWebCoreJavaBridge.fireSharedTimer(JWebCoreJavaBridge.java:92) 
01-20 18:00:50.841 7233-7288/ my.appli.com I/dalvikvm﹕ at android.webkit.JWebCoreJavaBridge.handleMessage(JWebCoreJavaBridge.java:108) 
01-20 18:00:50.841 7233-7288/ my.appli.com I/dalvikvm﹕ at android.os.Handler.dispatchMessage(Handler.java:99) 
01-20 18:00:50.841 7233-7288/ my.appli.com I/dalvikvm﹕ at android.os.Looper.loop(Looper.java:137) 
01-20 18:00:50.841 7233-7288/ my.appli.com I/dalvikvm﹕ at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:900) 
01-20 18:00:50.841 7233-7288/ my.appli.com I/dalvikvm﹕ at java.lang.Thread.run(Thread.java:856) 
01-20 18:00:50.841 7233-7288/ my.appli.com I/dalvikvm﹕ [ 01-20 18:00:50.841 7233: 7288 F/libc  ] 
    Fatal signal 11 (SIGSEGV) at 0x0000001c (code=1), thread 7288 (WebViewCoreThre) 

試圖用我的Android設備的默認瀏覽器加載相同的URL時,我已經經歷了同樣的問題(崩潰)(4.1 )。

我要加載的網址是:

http://presentbox.jp

謝謝您的幫助。

---編輯1

我已經試過了最近的Android手機(4.4)和應用程序沒有崩潰。

出於調試目的,我已經刪除了我網站(圖片,js,...)的所有沉重部分,但應用程序在滾動後仍然崩潰。

+0

您是否嘗試添加加載欄?這樣網頁就可以先載入第一個 – pratz9999

+0

謝謝你的回覆。是的,我已經添加了一個progressDialog,直到頁面加載,但仍然崩潰... – johann

+0

這將是一個好主意,也有一些日誌記錄。 –

回答

2

// 編輯:找到了!在general.css在上線2540的罪魁禍首:

#head-search-form{display: block;margin: 30px 0;} 

更具體地說,它是display: block,不知怎的,使WebView扼流圈。我不是一個網絡開發人員,但與flexnone交換價值似乎不會再導致崩潰(並且我無法分辨移動設備上的視覺差異)。希望有所幫助!


我已經成立了一個小的測試項目,並已能夠重現(虛擬)的Android 4.1設備上的崩潰。它似乎只在頁面完全加載後滾動時發生。即你可以擴大菜單抽屜沒有任何問題,只要你不開始滾動...

我能夠將罪魁禍首縮小到general.css。只要你不加載該樣式表,該頁面將工作並滾動得很好,但當然看起來不會很漂亮。

由於general.css計數3300+行,我建議你通過修復the errors indicated by the W3C CSS Validator開始搜索實際原因。如果這不能解決問題,請開始禁用與照片網格相關的樣式規則,特別是涉及動畫/轉換的任何內容。如果我能找到時間,我也可以自己去看看。

只是爲了您的信息,這裏是一個更廣泛的堆棧跟蹤。其他人也許能夠在那裏找到更多的指針。

mh.test.webview A/libc: Fatal signal 11 (SIGSEGV) at 0x00001f08 (code=1), thread 11949 (WebViewCoreThre) 
I/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 
I/DEBUG: Build fingerprint: 'generic/vbox86p/vbox86p:4.1.1/JRO03S/eng.buildbot.20151117.133415:userdebug/test-keys' 
I/DEBUG: pid: 11930, tid: 11949, name: WebViewCoreThre >>> mh.test.webview <<< 
I/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00001f08 
I/DEBUG:  eax b84902e4 ebx 9ba8b488 ecx b804b028 edx b83c0224 
I/DEBUG:  esi b8490360 edi b804b028 
I/DEBUG:  xcs 00000073 xds 0000007b xes 0000007b xfs 00000000 xss 0000007b 
I/DEBUG:  eip 00001f08 ebp 997b9748 esp 997b96dc flags 00010296 
I/DEBUG:  #00 pc 00001f08 <unknown> 
I/DEBUG:  #01 pc 00344fd6 /system/lib/libwebcore.so (WebCore::RenderLayerCompositor::computeCompositingRequirements(WebCore::RenderLayer*, WTF::HashMap<WebCore::RenderLayer*, WebCore::IntRect, WTF::PtrHash<WebCore::RenderLayer*>, WTF::HashTraits<WebCore::RenderLayer*>, WTF::HashTraits<WebCore::IntRect> >*, WebCore::CompositingState&, bool&)+38) 
I/DEBUG:  #02 pc 003454bb /system/lib/libwebcore.so (WebCore::RenderLayerCompositor::computeCompositingRequirements(WebCore::RenderLayer*, WTF::HashMap<WebCore::RenderLayer*, WebCore::IntRect, WTF::PtrHash<WebCore::RenderLayer*>, WTF::HashTraits<WebCore::RenderLayer*>, WTF::HashTraits<WebCore::IntRect> >*, WebCore::CompositingState&, bool&)+1291) 
I/DEBUG:  #03 pc 003454bb /system/lib/libwebcore.so (WebCore::RenderLayerCompositor::computeCompositingRequirements(WebCore::RenderLayer*, WTF::HashMap<WebCore::RenderLayer*, WebCore::IntRect, WTF::PtrHash<WebCore::RenderLayer*>, WTF::HashTraits<WebCore::RenderLayer*>, WTF::HashTraits<WebCore::IntRect> >*, WebCore::CompositingState&, bool&)+1291) 
I/DEBUG:  #04 pc 003454bb /system/lib/libwebcore.so (WebCore::RenderLayerCompositor::computeCompositingRequirements(WebCore::RenderLayer*, WTF::HashMap<WebCore::RenderLayer*, WebCore::IntRect, WTF::PtrHash<WebCore::RenderLayer*>, WTF::HashTraits<WebCore::RenderLayer*>, WTF::HashTraits<WebCore::IntRect> >*, WebCore::CompositingState&, bool&)+1291) 
I/DEBUG:  #05 pc 003454bb /system/lib/libwebcore.so (WebCore::RenderLayerCompositor::computeCompositingRequirements(WebCore::RenderLayer*, WTF::HashMap<WebCore::RenderLayer*, WebCore::IntRect, WTF::PtrHash<WebCore::RenderLayer*>, WTF::HashTraits<WebCore::RenderLayer*>, WTF::HashTraits<WebCore::IntRect> >*, WebCore::CompositingState&, bool&)+1291) 
I/DEBUG:  #06 pc 00346c55 /system/lib/libwebcore.so (WebCore::RenderLayerCompositor::updateCompositingLayers(WebCore::CompositingUpdateType, WebCore::RenderLayer*)+213) 
I/DEBUG:  #07 pc 0020e727 /system/lib/libwebcore.so (WebCore::FrameView::layout(bool)+1159) 
I/DEBUG:  #08 pc 0068126f /system/lib/libwebcore.so (WebCore::Document::updateLayout()+127) 
I/DEBUG:  #09 pc 0068bbda /system/lib/libwebcore.so (WebCore::Document::updateLayoutIgnorePendingStylesheets()+90) 
I/DEBUG:  #10 pc 005ead53 /system/lib/libwebcore.so (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue(int, WebCore::EUpdateLayout) const+467) 
I/DEBUG:  #11 pc 005f35e9 /system/lib/libwebcore.so (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue(int) const+41) 
I/DEBUG:  #12 pc 005e68d7 /system/lib/libwebcore.so (WebCore::CSSComputedStyleDeclaration::getPropertyValue(int) const+55) 
I/DEBUG:  #13 pc 006297f8 /system/lib/libwebcore.so (WebCore::CSSStyleDeclaration::getPropertyValue(WTF::String const&)+88) 
I/DEBUG:  #14 pc 004d9475 /system/lib/libwebcore.so (WebCore::CSSStyleDeclarationInternal::getPropertyValueCallback(v8::Arguments const&)+181) 
I/DEBUG:  #15 pc 000efdd4 <unknown> 
I/DEBUG:  #16 pc 0005cf6b <unknown> 
I/DEBUG:  #17 pc 000bb32f <unknown> 
I/DEBUG:  #18 pc 00003b41 <unknown> 
I/DEBUG:  #19 pc 000f47ce <unknown> 
I/DEBUG:  #20 pc 0001a5a3 <unknown> 
I/DEBUG:  #21 pc 000065e3 <unknown> 
I/DEBUG:  #22 pc 00003b41 <unknown> 
I/DEBUG:  #23 pc 00024c59 <unknown> 
I/DEBUG:  #24 pc 00024dad <unknown> 
I/DEBUG:  #25 pc 00003b41 <unknown> 
I/DEBUG:  #26 pc 0001a59c <unknown> 
I/DEBUG:  #27 pc 000d7172 <unknown> 
I/DEBUG:  #28 pc 0001a5a3 <unknown> 
I/DEBUG:  #29 pc 000d40ed <unknown> 
I/DEBUG:  #30 pc 00017bf9 <unknown> 
I/DEBUG:  #31 pc 00008c2a <unknown> 
I/DEBUG:   997b969c 00000000 
I/DEBUG:   997b96a0 00000000 
I/DEBUG:   997b96a4 00000000 
I/DEBUG:   997b96a8 00000000 
I/DEBUG:   997b96ac 00000000 
I/DEBUG:   997b96b0 00000000 
I/DEBUG:   997b96b4 00000000 
I/DEBUG:   997b96b8 00000000 
I/DEBUG:   997b96bc 00000000 
I/DEBUG:   997b96c0 00000000 
I/DEBUG:   997b96c4 00000000 
I/DEBUG:   997b96c8 00000000 
I/DEBUG:   997b96cc 00000000 
I/DEBUG:   997b96d0 00000000 
I/DEBUG:   997b96d4 00000000 
I/DEBUG:   997b96d8 00000000 
I/DEBUG:  #00 997b96dc 9ad1cdd4 /system/lib/libwebcore.so (WebCore::RenderLayer::updateLayerPosition()+52) 
I/DEBUG:   997b96e0 b84902e4 [heap] 
I/DEBUG:   997b96e4 b8490090 [heap] 
I/DEBUG:   997b96e8 0000000f 
I/DEBUG:   997b96ec 0000002f 
I/DEBUG:   997b96f0 b8490090 [heap] 
I/DEBUG:   997b96f4 00000001 
I/DEBUG:   997b96f8 9ad2204e /system/lib/libwebcore.so (WebCore::RenderLayer::repaintIncludingNonCompositingDescendants(WebCore::RenderBoxModelObject*)+14) 
I/DEBUG:   997b96fc b827f428 [heap] 
I/DEBUG:   997b9700 9ba8b488 /system/lib/libwebcore.so 
I/DEBUG:   997b9704 b8490090 [heap] 
I/DEBUG:   997b9708 997b9748 [stack:11949] 
I/DEBUG:   997b970c 9ad35d38 /system/lib/libwebcore.so (WebCore::RenderLayerCompositor::updateBacking(WebCore::RenderLayer*, WebCore::RenderLayerCompositor::CompositingChangeRepaint)+344) 
I/DEBUG:   997b9710 b8490014 [heap] 
I/DEBUG:   997b9714 b848fe3c [heap] 
I/DEBUG:   997b9718 00000012 
I/DEBUG:   ........ ........ 
I/DEBUG:  #01 997b9750 b8490360 [heap] 
I/DEBUG:   997b9754 b8490090 [heap] 
I/DEBUG:   997b9758 00000000 
I/DEBUG:   997b975c 997b98e0 [stack:11949] 
I/DEBUG:   997b9760 997ba84f [stack:11949] 
I/DEBUG:   997b9764 b843a9e4 [heap] 
I/DEBUG:   997b9768 00000034 
I/DEBUG:   997b976c 00000180 
I/DEBUG:   997b9770 b848fe3c [heap] 
I/DEBUG:   997b9774 b85257f8 [heap] 
I/DEBUG:   997b9778 9ace0300 /system/lib/libwebcore.so (WebCore::RenderBox::dirtyLineBoxes(bool)+80) 
I/DEBUG:   997b977c 43400000 
I/DEBUG:   997b9780 b83fe51c [heap] 
I/DEBUG:   997b9784 997b9788 [stack:11949] 
I/DEBUG:   997b9788 004a0000 
I/DEBUG:   997b978c b848feb8 [heap] 
I/DEBUG:   ........ ........ 
I/DEBUG:  #02 997b9aa0 b804b028 [heap] 
I/DEBUG:   997b9aa4 b8490360 [heap] 
I/DEBUG:   997b9aa8 00000000 
I/DEBUG:   997b9aac 997b9c30 [stack:11949] 
I/DEBUG:   997b9ab0 997ba84f [stack:11949] 
I/DEBUG:   997b9ab4 b83fe51c [heap] 
I/DEBUG:   997b9ab8 00000000 
I/DEBUG:   997b9abc 00000001 
I/DEBUG:   997b9ac0 b86fd038 [heap] 
I/DEBUG:   997b9ac4 b86fd368 [heap] 
I/DEBUG:   997b9ac8 997b9b48 [stack:11949] 
I/DEBUG:   997b9acc 9adac54a /system/lib/libwebcore.so (WebCore::TransformState::move(int, int, WebCore::TransformState::TransformAccumulation)+58) 
I/DEBUG:   997b9ad0 b83fe678 [heap] 
I/DEBUG:   997b9ad4 b8294d4c [heap] 
I/DEBUG:   997b9ad8 00580b05 
I/DEBUG:   997b9adc b83fe770 [heap] 
I/DEBUG:   ........ ........ 
I/DEBUG:  (no map below) 
I/DEBUG:  (no map for address) 
I/DEBUG:  20c1e000-20c1f000 
+0

你值得@MH點。 !它現在的作品〜我會花幾個小時來修復所有的CSS問題,謝謝 – johann

+1

@johann:很高興聽到它確實爲你解決了!發現罪魁禍首主要是一個反覆試驗的過程,所以我不驚訝你很難追蹤它。 :) –

2

您是否正在使用定製版本的Android?一個特定的mod?如果你這樣做 - 這個問題總是有可能是ROM引起的。有些情況下,WebView在特定版本的Android或特定ROM上遇到問題。 一些鏈接: https://code.google.com/p/chromium/issues/detail?id=481420 http://googlechromereleases.blogspot.com.au/2015/04/android-webview-stable-update.html http://forum.xda-developers.com/verizon-htc-one-m8/help/android-webviewer-update-huge-turd-t3091192/post60333480#post60333480 Android System WebView crashes Android apps! "Tombstones are disabled on JB MR2+ user builds"

檢查您的WebView是最新的。如果是 - 卸載更新並檢查問題是否仍然存在。如果它不是最新的 - 請進行更新並檢查問題是否存在。絕大多數機會不會。

另外 - 這個問題可能不會發生太多。在我使用的大多數設備中--WebView是可靠和穩定的。

祝你好運。

+0

感謝您的寶貴意見。我的Android版本(4.1)是普通版本(由fujitsu提供)。使用默認瀏覽器時也會發生崩潰,我無法更新它。正如你所提到的,崩潰只發生在少數設備上。也許我的js代碼也需要加強。我會檢查它。 – johann

+0

您可以登錄瀏覽器控制檯並使用webviewclient界面接收消息。它可以幫助您查明導致問題的js代碼行。 – FunkSoulBrother

+0

謝謝。遵循你的建議,我試圖用onConsoleMessage方法進行調試,但方法從未被調用過。 – johann

1

嘗試刪除這些行:

wv.clearCache(true); 
wv.clearHistory(); 

wv.setDownloadListener(new DownloadListener() { 
    @Override 
     public void onDownloadStart(String url, String userAgent, 
            String contentDisposition,  String mimetype, long contentLength) { 
      Intent intent = new Intent(Intent.ACTION_VIEW); 
      intent.setType(mimetype); 
      intent.setData(Uri.parse(url)); 
      startActivity(intent); 
     } 
    }); 

wv.setWebChromeClient(new WebChromeClient() { 
     public void onProgressChanged(WebView view, int progress) { 
      MainActivity.this.setProgress(progress * 1000); 
     } 
     public boolean onConsoleMessage(ConsoleMessage cm) { 
      Log.d("MyProject: WebView: ", cm.message() + " -- From line " 
       + cm.lineNumber() + " of " 
       + cm.sourceId()); 
     return true; 
    } 
    }); 

這有可能是你的版本有問題,Chrome用戶端

+0

謝謝。我已刪除這些行,但仍然崩潰 – johann

+0

嘗試使用簡單的內容和測試創建頁面。它可以是頁面內容中的東西。 –

1

我有一個類似的問題,加載谷歌地圖對象/或任何2D Canvas對象在Web視圖我的Nexus 5X和Nexus 6P設備上運行Android 6.0.x.後

我看來,雖然這關係到這裏報告一個硬件錯誤: https://code.google.com/p/chromium/issues/detail?id=541145

修補程序或解決方法似乎是它在即將到來的WebView版本的方式。

在新的webview版本發佈之前,我不得不採用建議的將webview設置爲軟件渲染的修復方法。這使得地圖變慢,但它至少會導致崩潰。

if(isNexus5xOr6p() && android.os.Build.VERSION.SDK_INT >= 11) 
     webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

public boolean isNexus5xOr6p() { 

    if(getDeviceName().contains("nexus 6p") || getDeviceName().contains("nexus 5x")) 
        return true; 
       else 
        return false; 
     } 


public String getDeviceName() { 
     String manufacturer = Build.MANUFACTURER; 
     String model = Build.MODEL; 
     if (model.startsWith(manufacturer)) { 
      return model.toLowerCase(); 
     } 
     return (manufacturer + " " + model).toLowerCase(); 
}