1. 程式人生 > >解決用WebView去載入網頁在部分手機上閃退問題

解決用WebView去載入網頁在部分手機上閃退問題

1.緒論

Binary XML file line #29: Error inflating class android.webkit.WebView…這種錯誤,你見過麼?最近公司應用(雲電腦)在各個應用市場比較火,用的人也多,在後臺統計的錯誤日誌裡,出現了個奇葩的bug,它就是WebView載入網頁閃退bug。大部分出現在一加、三星、OPPO手機中,不知道大家有沒有遇到過,下面是錯誤詳細資訊:

android.view.InflateException: Binary XML file line #29: Error inflating class android.webkit.WebView
at android.view.LayoutInflater.createView(LayoutInflater.java:620) at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:57) at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669) ...//由於篇幅原因,省略無關錯誤日誌 Caused by: java.lang
.UnsupportedOperationException at com.android.webview.nullwebview.NullWebViewFactoryProvider.createWebView(NullWebViewFactoryProvider.java:41) at android.webkit.WebView.ensureProviderCreated(WebView.java:2058) at android.webkit.WebView.setOverScrollMode(WebView.java
:2116) at android.view.View.<init>(View.java:3461) at android.view.View.<init>(View.java:3517) at android.view.ViewGroup.<init>(ViewGroup.java:470) at android.widget.AbsoluteLayout.<init>(AbsoluteLayout.java:52) at android.webkit.WebView.<init>(WebView.java:498)

下面是引用WebView的佈局檔案:

好可怕!WebView是系統api提供的,竟然會找不到!這個時候,好方…….

我們可能會想到手機系統出現問題了,有可能是使用者刷系統了,或者使用者把手機root後系統弄壞了,還有可能就是廠商定製的手機系統本身就存在問題。

2.解決思路

對於上面的猜想,歸納起來就是手機系統有問題了。我們可能想到的解決辦法就是不用系統的webView,用第三方的網頁載入庫實現功能,比如騰訊提供的瀏覽器核心SDK,如果你需求只是用來載入網頁,功能簡單的話,這個是可行的,如果需要實現複雜的功能,那這個SDK也是會有很多坑,其中這個SDK不支援64位執行環境的。

剛猜測手機系統出現問題了,那為什麼手機自帶瀏覽器訪問網頁又沒事呢?看來我們得去研究下自帶瀏覽器了,我們拿出現過這個異常的手機把它root掉,然後拷出自帶瀏覽器apk,進行反編譯,檢視原始碼…這個過程有些繁瑣就不講解了,直接說結果,結果如下:

手機自帶瀏覽器也是用系統api的webView來實現載入網頁的。

擦…你這不是在撮我麼?那系統就沒問題才對啊?

還沒說完,別激動!

其實這個就可以說明系統還是有webView這個api的,我無意間看到手機自帶瀏覽器的libs目錄下發現沒有64位庫的資料夾如:arm64-v8a、mips64、x86_64,那這就說明這個應用只支援32位執行環境。由此 大概可以猜想我們應用為啥在這個手機上報錯了。

首先,這個手機是支援64位的,然後我們應用也適配了64位執行環境,那我們應用就是在64位執行環境下執行,然而開啟網頁就報錯了。

報錯就說明系統提供的webView Api 只能在32位執行環境下執行,不相容64位

那麼 這問題怎麼解呢?

我們可以把應用裡適配的64位系統的庫和目錄全刪掉,試試…

經過驗證,是沒問題的,可以正常開啟網頁。不過讓64位系統執行32位的應用,效能會有點點損失的。

到這裡分析就結束了,如果有什麼疑問,歡迎留言交流!如果沒有的話就給筆者點個讚唄! ^_^

相關推薦

解決WebView載入網頁部分手機退問題

1.緒論 Binary XML file line #29: Error inflating class android.webkit.WebView…這種錯誤,你見過麼?最近公司應用(雲電腦)在各個應用市場比較火,用的人也多,在後臺統計的錯誤日誌裡,出現了個

Android WebView載入網頁部分手機退問題

我無意間看到手機自帶瀏覽器的libs目錄下發現沒有64位庫的資料夾如:arm64-v8a、mips64、x86_64,那這就說明這個應用只支援32位執行環境。由此 大概可以猜想我們應用為啥在這個手機上報錯了。 首先,這個手機是支援64位的,然後我們應用也適配了64位執行環境

解決原生webView無法載入部分格式視訊的問題

  關於如何整合方面,雖然X5官網 有接入指南,但個人感覺某些方面不是很詳細,所以我就總結一下自己的整合步驟:         1、首先在官網下載官方demo ,在手機上執行看看能否滿足自己的需求?如果不能滿足的話,我還知道有另一個專案,可以試試:Crosswalk ;

Android中webview撥打載入網頁中的電話超連結

wv_main = find(R.id.wv_main);//例項化webview wv_main.loadUrl(url); //啟用支援javascript WebSettings setting

安卓webview快速載入網頁研究提速(一級加速)

<html> <head> <script type="text/javascript" src="/jquery/jquery.js"></script> <script type="text/javascript"&

webview重寫 shouldOverrideUrlLoading,在部分手機不能攔截?

在前兩天的開發過程成遇到到這樣的一個這樣的問題,就是即使在WebViewClient中,重寫了shouldOverrideUrlLoading,方法在我的某米手機上依然是不能攔截url; private class MyWebViewClient extend

.Net語言 APP開發平臺如何在webview載入網頁

最前面的話:Smobiler是一個在VS環境中使用.Net語言來開發APP的開發平臺 一、目標樣式 我們要實現上圖中的效果,需要如下的操作: 1.從工具欄上的“Smobiler Components”拖動一個WebView控制元件、一個Button控制元件和一個T

解決Macspotlight搜尋輸入幾個字母后退

問題描述:使用spotlight進行搜尋時,只要輸入字母超過一定個數(在我的Mac上是3個),spotlight就閃退了。 谷歌搜尋得到大部分解決方案是在系統自帶詞典的偏好設定裡取消外部字典的勾選(如https://placeless.net/2017/09/28/spotlight-searc

解決bootstrap中輪播外掛支援手機的手勢滑動的問題

解決途徑: 在頁面中新增 <script type="text/javascript" src="jquery/1.7.2/jquery.touchSwipe.min.js"></

呼叫系統相簿傳圖片到伺服器--OPPO等部分手機出現短暫的顯示桌面問題

主要原因是主體樣式設定的問題:這裡把appTheme設定一個style即可:         <item name="android:windowBackground">@color/white</item>         <!--下面這個屬

ios 正則獲取需要的內容出現退(異常捕捉 try...catch...finally使用。)

1.用正則表示式取出需要的字串( @".\$([A-Za-z0-9]{13})\$.||.\#([A-Za-z0-9]{13})\#.||.\([A-Za-z0-9]{13})\.||.\%([A-Za-z0-9]{13})\%.||.\€([A-Za-z0-9]{13})\€." )

Macspotlight搜尋輸入幾個字母后退

最近使用電腦時遇到的問題: 使用spotlight進行搜尋時,只要輸入字母超過一定個數(在我的Mac上是3個),spotlight就閃退了。 谷歌搜尋得到大部分解決方案是在系統自帶詞典的偏好設定裡取消外部字典的勾選(如https://placeless.net/2017/09/28/spotlight-s

react-native-image-picker在Android退解決辦法(傳頭像base64,壓縮傳圖片)

問題描述:最近做專案上傳頭像時用到了react-native-image-picker第三方庫,使用的是 base64格式 上傳,在以下配置的情況下,android點選選擇相簿會遇到閃退的問題,找到了

react-native-image-picker在iOS退解決辦法

最近做專案用到了react-native-image-picker這個圖片選擇的第三方庫,但在正確配置的情況下,點選選擇相簿會遇到閃退的問題,憑藉開發原生的經驗,找到了問題所在,在這裡分享一下解決辦法。 http://www.jianshu.com/p/977bc5ee

WebView中使用Label標籤導致iOS退

在WebView中載入HTML5程式碼:<div class="ui-form-item ui-form-item-show ui-form-item-link ui-border-b upCollPage" data-type="input" onclick=""&g

安卓7.0 WebView 載入網頁空白解決辦法

mainWebView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(W

android:webview載入網頁速度很慢的的究極解決方案

 Android客戶端中混搭HTML頁面,會出現雖然HTML內容載入完成,標題也正常顯示,但是整個網頁需要等到近5秒(甚至更多)時間才會顯示出來。研究了很久,搜遍了國外很多網站,也看過PhoneGap的程式碼,一直無解。        一般人堆WebView的加速,都是建

android中的webview載入網頁只想顯示部分內容改怎麼做

@Override public void onPageFinished(WebView view, String url) { if(url!=null && url.contains("/p/resource/weapon/iProductID/39")){ S

android webview載入網頁按後退鍵黑屏一下問題的解決方案

出現這個問題剛開始還真是一頭霧水,不知道怎麼解決,後來跟同事一交流,發現凡是這種問題,很大一部分原因是application的style,或者activity的style設定問題,比如啟動頁黑屏問題也

WebView控制元件載入網頁顯示速度慢的究極解決方案

可以看到在載入完最後一個JS指令碼之後,對DOM元素的渲染和處理就花了8秒,然後執行了AJAX方法載入外部頁面又花了2、3秒,最後才會觸發onPageFinished顯示頁面。再往後由於程式中設定了setBlockNetworkImage(false),所以開始載入外部圖片。(如果不控制這個引數,圖片載入會在