小米安卓java模拟器手机版_Android P(9.0) 行为变更完美适配WebView(小米手机也适用)...
最近在后臺發現app報webview的錯誤,主要原因是Android P的行為變更導致的。
WebView崩潰錯誤
java.lang.RuntimeException
Using WebView from more than one process at once with the same data directory is not supported
webview報錯
解析
Android P行為變更,不可多進程使用同一個目錄webView,需要為不同進程webView設置不同目錄。
Android P 變更
Android Pie ( API 級別 28 ) 是谷歌于 2018 年 8 月 7 日發布的正式版系統。將 targetSdkVersion 設為 API 28 或更高級別的應用必須進行修改,以便正確支持這些行為
Android P 針對WebView變更
模擬WebView錯誤
第一步
將應用的 targetSdkVersion 的 API 級別設為 28
第二步
通過兩個處于不同進程的 Activity 分別使用 WebView 加網頁實現
第三步
為 Activity 設置進程需要在 AndroidManifest.xml 文件中對應的 Activity 節點下增加 process 屬性,并設置進程名
package="com.zyb.webviewtest">
......
android:name=".TestWebViewActivity"
android:process=":ProcessName" />
......
注意:process 的命名不能以數字開頭,否正會提示 Install failed。
最后,在Android P 的模擬器或真機上運行,就可以重現之前提到的錯誤。如果沒有重現,請將清單文件中 Application 節點下的 name 屬性注釋后重試。
修復WebView錯誤
很顯然,webview的錯誤是在不同進程下導致的,也就是說Android P針對 WebView在不同進程下無法訪問非自己進程中的webview目錄。
解決這個問題,就需要兼容Android P,上代碼:
public class TestApplication extends Application {
private static final String PROCESSNAME = "com.zyb.webviewtest";
@Override
public void onCreate() {
super.onCreate();
//放在onCreate方法中,部分小米手機未生效,同樣還會報錯,故放在分包時配置webview緩存
//initWebView();
}
@Override
protected void attachBaseContext (Context base) {
super.attachBaseContext(base);
initWebView();
MultiDex.install(this);
}
private void initWebView() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
String processName = getProcessName(this);
if (!PROCESSNAME.equals(processName)) {
WebView.setDataDirectorySuffix(getString(processName, "zyb"));
}
}
}
}
我們可以為每個進程指定唯一的數據目錄后綴,再該進程中使用WebView。
在Application分包的時候設置對應的WebView數據目錄后綴。
之前將webview的初始化放在Application中的onCreate()方法中,部分小米手機使用不生效,還是會報同樣的錯誤。
所以將webview的初始化放在
方法中,也就是在分包時就初始化,最終解決了這個問題~
為什么在Application初始化的時候設置呢?
Application的 attachBaseContext() 方法在分包時調用,我們可以在新開進程的時候拿到當前的進程名稱與主進程進行對比,如果不一致,我們就為該進程指定對應的WebView緩存目錄后綴。
最后
重新運行在Android P上測試,在App安裝路徑下 (data/data/包名) 會發現多一個對應進程后綴的webview緩存目錄。
最后,希望此篇博客對大家有所幫助,歡迎提出問題及建議共同探討,如有興趣可以關注我的博客,謝謝!
總結
以上是生活随笔為你收集整理的小米安卓java模拟器手机版_Android P(9.0) 行为变更完美适配WebView(小米手机也适用)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Foobar2000是一款完全可定制的音
- 下一篇: Android 第一课 Activit