美文网首页
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