Android 无法从单独的进程启动WorkManager

Android 无法从单独的进程启动WorkManager,android,android-jetpack,android-workmanager,Android,Android Jetpack,Android Workmanager,我正在使用WorkManager库(版本:1.0.0-alpha12)。在我的应用程序中,我正在使用AndroidManifest中下面的xml行创建一个新进程 android:process=":myprocess" 以下是我使用WorkManager的方式: public static void startCheckStatusWorker() { WorkManager manager = WorkManager.getInstance(); String unique

我正在使用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)
如果我调用相同的方法,从正常的应用程序进程来看,它工作得很好,并且我不会像它建议的那样在我的应用程序清单中禁用WorkManagerInitializer

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

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

如果您确实需要将服务置于单独的进程中,您可以在AndroidManifest中禁用WorkManagerInitializer。 是这样的:


(有关正式文件,请参阅)

禁用后,在应用程序类中(如果没有应用程序类,则应创建自己的应用程序类并扩展android应用程序类),然后调用WorkManager.initialize()

那帮我修好了

但是请注意,根据google issues forums()中的一些回答,workmanager仍然会使用主进程来完成工作(即使它是从第二个进程调用的)


我推荐什么?如果将服务放在非主进程上没有什么明显的好处,那么您应该将服务放在主进程上,因为这样更难维护(例如,静态全局变量将有两个实例,每个进程一个)

有没有办法让workmanager在一个与使用该库的应用程序不同的库中工作?我不确定,但我想你可以。android project>your lib>build.gradle中声明了workmanager。app module>build.gradle将在您的lib中安装workmanager。请参阅我的帖子: