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