gpt4 book ai didi

java - 确保 Android 应用程序在单个进程中运行

转载 作者:IT王子 更新时间:2023-10-29 06:22:54 25 4
gpt4 key购买 nike

由于应用程序在多个进程中打开,我们最近开始在我们的 Android 应用程序中遇到崩溃。几个不同的错误指向这一点。例如这个错误:

com.google.firebase.database.DatabaseException: Failed to gain exclusive lock to Firebase Database's offline persistence. This generally means you are using Firebase Database from multiple processes in your app. Keep in mind that multi-process Android apps execute the code in your Application class in all processes, so you may need to avoid initializing FirebaseDatabase in your Application class. If you are intentionally using Firebase Database from multiple processes, you can only enable offline persistence (i.e. call setPersistenceEnabled(true)) in one of them.

我们也看到了来自 SQLite 和 H2 的类似错误。这是一个新问题,我们还没有明确允许运行多个进程。我们的 AndroidManifest.xml 中没有指定自定义 android:process 属性。

我怀疑是某些第三方库导致的。如何确定多个进程的根本原因以及如何预防?

我们的另一个应用程序正在通过 ContentProvider 连接到此应用程序。起初我认为它具有 android:multiprocess="true" 是罪魁祸首,但将其更改为“false”并没有帮助。我仍然怀疑另一个应用程序以某种方式触发了新进程的创建。这是 ContentProvider 的定义方式:

  <provider
android:name=".DegooContentProvider"
android:authorities="${applicationId}.DegooContentProvider"
android:exported="true"
android:protectionLevel="signature"
android:multiprocess="false">
</provider>

最佳答案

如果有外部进程,你可以检查你的应用程序类。这是一个例子:

public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
if (!isMainProcess()) {
// Do not call thread unsafe logic. Just return
return;
}
// Thread unsafe logic.
...
}

private boolean isMainProcess() {
int pid = android.os.Process.myPid();
ActivityManager manager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
String currentProcName = processInfo.processName;
if (processInfo.pid == pid) {
if (TextUtils.equals(currentProcName, BuildConfig.APPLICATION_ID)) {
return true;
}
}
}
return false;
}
}

关于java - 确保 Android 应用程序在单个进程中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51734385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com