java.lang.RuntimeException: Using WebView from more than one process at once with the same data directory is not supported. https://crbug.com/558377 : Lock owner xxx:pushcore (pid 10343)
at org.chromium.android_webview.AwDataDirLock.b(chromium-TrichromeWebViewGoogle.apk-stable-410410683:26)
at ka.i(chromium-TrichromeWebViewGoogle.apk-stable-410410683:37)
at ka.b(chromium-TrichromeWebViewGoogle.apk-stable-410410683:15)
at ka.k(chromium-TrichromeWebViewGoogle.apk-stable-410410683:2)
at com.android.webview.chromium.WebViewChromiumFactoryProvider.h(chromium-TrichromeWebViewGoogle.apk-stable-410410683:2)
at com.android.webview.chromium.WebViewChromium.init(chromium-TrichromeWebViewGoogle.apk-stable-410410683:14)
at android.webkit.WebView.<init>(WebView.java:430)
at android.webkit.WebView.<init>(WebView.java:354)
at android.webkit.WebView.<init>(WebView.java:337)
at android.webkit.WebView.<init>(WebView.java:324)
at android.webkit.WebView.<init>(WebView.java:314)
at com.bytedance.sdk.openadsdk.core.widget.webview.SSWebView.<init>(SSWebView.java:1)
at com.bytedance.sdk.openadsdk.utils.aj$2.run(aj.java:1)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7710)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
2020-08-06 10:41:06.918 11079-11079/com.bitgaai.news E/TTCrashHandler: ==0, true, false
产生这个错误的原因是在 Android 9
及以上版本,不允许在不同的进程使用相同的 Webview
目录。
我遇到这个问题 的情景是项目里面使用了极光的推送服务
<service
android:name=".jpush.PushService"
android:enabled="true"
android:exported="false"
android:process=":pushcore">
<intent-filter>
<action android:name="cn.jiguang.user.service.action" />
</intent-filter>
</service>
android:process=":pushcore"
开启了多进程。
然后我又使用了某广告 sdk
,里面使用了 Webview
来加载的广告,都是在 App onCreate()
中初始化的,导致前面的错误发生。
解决办法就是在 App onCreate()
中初始化广告 sdk
之前调用下面的方法
public void fixWebViewDataDirectoryBug() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
String processName = getProcessName();
String packageName = this.getPackageName();
if (!packageName.equals(processName)) {
WebView.setDataDirectorySuffix(processName);
}
}
}
给我们应用主进程之外的进程 Webview
分别设置一个目录后缀。
网友评论