美文网首页
java.lang.RuntimeException: Usin

java.lang.RuntimeException: Usin

作者: 一个脱离高级趣味的人 | 来源:发表于2020-08-06 11:03 被阅读0次
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 分别设置一个目录后缀。

相关文章

网友评论

      本文标题:java.lang.RuntimeException: Usin

      本文链接:https://www.haomeiwen.com/subject/jnrzrktx.html