日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

小米安卓java模拟器手机版_Android P(9.0) 行为变更完美适配WebView(小米手机也适用)...

發布時間:2023/12/10 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小米安卓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(小米手机也适用)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。