Wen*_* Mo 21 android process webview
1.当我在 Android 9 上的 Fragment onCreateView 方法 inflater.inflate(webview_layout, container, false) 中时,可能会因吹气日志而崩溃:
致命异常:java.lang.RuntimeException:不支持从多个进程同时使用具有相同数据目录的 WebView。https://crbug.com/558377
在 jO.b(PG:102)
在 jQ.run(PG:3)
在 android.os.Handler.handleCallback(Handler.java:873)
在 android.os.Handler.dispatchMessage(Handler.java:99)
在 android.os.Looper.loop(Looper.java:226)
在 android.app.ActivityThread.main(ActivityThread.java:7210)
在 java.lang.reflect.Method.invoke(Native Method)
在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:499)
在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:961)
2.我尝试在 Application onCreate 方法中添加打击代码
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
String processName = getProcessName();
if (!MAIN_PROCESS.equals(processName)) {
WebView.setDataDirectorySuffix(getProcessName() + ".webview");
}
}
Run Code Online (Sandbox Code Playgroud)
但是一些Android手机也因为同样的原因崩溃,我不使用多进程的webview,然后我尝试在inflater.inflate(webview_layout,container,false)之前在Fragment onCreateView中添加这段代码
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
String processName = getProcessName();
try {
WebView.setDataDirectorySuffix(processName);
} catch (Throwable e) {
// ignore
}
}
Run Code Online (Sandbox Code Playgroud)
但是我也在 PCAM10\PCEM00\PCAT10... 中得到了一些相同的崩溃报告,我无法在本地重新出现这个崩溃。
这次崩溃是否还有其他原因?
Had*_*adi 12
在初始化 Admob 之前在 Application 类中使用此代码解决了我的问题:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
val process = getProcessName()
if (packageName != process) WebView.setDataDirectorySuffix(process)
}
MobileAds.initialize(this)
Run Code Online (Sandbox Code Playgroud)
从 API 28 开始,有一个新的有效 API 可以获取进程名称。[https://developer.android.com/reference/android/app/Application.html#getProcessName()][1]
正如google文档中提到的,从API 28开始,很明显,在多进程中运行的WebView不能共享相同的数据目录。
这意味着同一应用程序中的不同进程不能直接共享WebView相关的数据,因为数据目录必须是不同的。
另外,请检查您是否正在初始化 Application 类中的任何进程。参考链接: Android Pie (9.0) 多进程中的WebView
| 归档时间: |
|
| 查看次数: |
4072 次 |
| 最近记录: |