gpt4 book ai didi

android - 无法从单独的进程初始化 WorkManager

转载 作者:行者123 更新时间:2023-11-29 18:37:25 24 4
gpt4 key购买 nike

我正在使用 WorkManager 库(版本:1.0.0-alpha12)。在我的应用程序中,我使用 AndroidManifest 中的以下 xml 行创建了一个新进程。

android:process=":myprocess"

这就是我使用 WorkManager 的方式:

 public static void startCheckStatusWorker() {
WorkManager manager = WorkManager.getInstance();
String uniqueName = "check_status_worker";
PeriodicWorkRequest.Builder builder = new PeriodicWorkRequest.Builder(CheckStatusWorker.class, 1, TimeUnit.DAYS);
builder.setConstraints(new Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build());
PeriodicWorkRequest request = builder.build();
manager.enqueueUniquePeriodicWork(uniqueName, ExistingPeriodicWorkPolicy.KEEP, request);
}

但是当我从新进程调用这个方法时,应用程序崩溃了。这是抛出的异常,

java.lang.IllegalStateException: WorkManager is not initialized properly.  The most likely cause is that you disabled WorkManagerInitializer in your manifest but forgot to call WorkManager#initialize in your Application#onCreate or a ContentProvider.
at androidx.work.WorkManager.getInstance(WorkManager.java:139)

如果我从正常的应用进程中调用相同的方法,它运行良好,并且我没有按照它的建议在我的应用 list 中禁用 WorkManagerInitializer。

有没有办法从新进程中获取 WorkManager 实例?

如有任何建议,我们将不胜感激。谢谢。

最佳答案

如果你真的真的需要服务在一个单独的进程中,你可以在 AndroidManifest 中禁用 WorkManagerInitializer。是这样的:

    <provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
tools:node="remove"
android:exported="false" />

(官方文档引用https://developer.android.com/topic/libraries/architecture/workmanager/advanced/custom-configuration#java)

禁用它后,在您的 Application 类中(如果您没有,您应该创建自己的并扩展 android Application 类),然后调用 WorkManager.initialize()。

这对我来说已经解决了。

但请注意,根据 google 问题论坛 ( https://issuetracker.google.com/issues/79993883 ) 中的一些答案,workmanager 仍将使用主进程来完成工作(即使它是从第二个进程调用的)。

我推荐什么?如果在非主进程上提供服务没有明显的优势,你应该让服务在主进程上,因为它更难维护(例如静态全局变量将有两个实例,每个实例一个过程)

关于android - 无法从单独的进程初始化 WorkManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53746097/

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