我在 chromim80 上的三星 Android 10 手机上遇到了这个异常。其他设备似乎没问题。
java.lang.RuntimeException: Unable to start activity ComponentInfo{...}: java.lang.RuntimeException: Failed to create lock file /data/user/0/my_package/app_webview/webview_data.lock
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3448)
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3595)
android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:2147)
android.os.Handler.dispatchMessage(Handler.java:107)
android.os.Looper.loop(Looper.java:237)
android.app.ActivityThread.main(ActivityThread.java:7814)
java.lang.reflect.Method.invoke(Native Method:0)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)
Caused by: java.lang.RuntimeException: Failed to create lock file /data/user/0/my_package/app_webview/webview_data.lock
org.chromium.android_webview.AwDataDirLock.b(chromium-TrichromeWebViewGoogle.aab-stable-428014130:31)
Mj.i(chromium-TrichromeWebViewGoogle.aab-stable-428014130:31)
Mj.b(chromium-TrichromeWebViewGoogle.aab-stable-428014130:16)
Mj.k(chromium-TrichromeWebViewGoogle.aab-stable-428014130:2)
com.android.webview.chromium.WebViewChromiumFactoryProvider.g(chromium-TrichromeWebViewGoogle.aab-stable-428014130:2)
com.android.webview.chromium.WebViewChromium.init(chromium-TrichromeWebViewGoogle.aab-stable-428014130:14)
android.webkit.WebView.<init>(WebView.java:429)
android.webkit.WebView.<init>(WebView.java:353)
android.webkit.WebView.<init>(WebView.java:336)
android.webkit.WebView.<init>(WebView.java:323)
android.webkit.WebView.<init>(WebView.java:313)
我的 targetSDK 是 29,我添加了 android:requestLegacyExternalStorage="true"
和 WebView.setDataDirectorySuffix(processName);
。
有人知道怎么解决这个问题吗?
更新:
我发现了这个,所以我认为这是原因。它只发生在 chromim80 上。
目前看来我只能在主进程上使用 webview。
答案 0 :(得分:0)
Android 9 禁止在多个进程之间共享 Web 视图数据目录。如果一个 web 视图已经在使用它,那么它将无法访问它。相反,你可以试试这个
public void onCreate() {
...
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
String processName = getProcessName(this);
String packageName = this.getPackageName();
if (!packageName.equals(processName)) {
WebView.setDataDirectorySuffix(processName);
}
}}
private String getProcessName(Context context) {
if (context == null) return null;
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
if (processInfo.pid == android.os.Process.myPid()) {
return processInfo.processName;
}
}
return null;
}