解決用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位的應用,性能會有點點損失的。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章