Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android WorkManager-当我们同时使用默认初始化和自定义初始化时,我们是否应该删除默认初始值设定项?_Android_Androidx_Android Workmanager - Fatal编程技术网

Android WorkManager-当我们同时使用默认初始化和自定义初始化时,我们是否应该删除默认初始值设定项?

Android WorkManager-当我们同时使用默认初始化和自定义初始化时,我们是否应该删除默认初始值设定项?,android,androidx,android-workmanager,Android,Androidx,Android Workmanager,当我将WorkManager从“2.2.0”升级到“2.3.0-rc01”时,出现以下新错误 导出APK时出错 C:\app: Error: Remove androidx.work.impl.WorkManagerInitializer from your AndroidManifest.xml when using on-demand initialization. [RemoveWorkManagerInitializer] Explanation for issues of ty

当我将WorkManager从“2.2.0”升级到“2.3.0-rc01”时,出现以下新错误

导出APK时出错

C:\app: Error: Remove androidx.work.impl.WorkManagerInitializer from your AndroidManifest.xml when using on-demand initialization. [RemoveWorkManagerInitializer]

   Explanation for issues of type "RemoveWorkManagerInitializer":
   If an android.app.Application implements
   androidx.work.Configuration.Provider,
   the default androidx.work.impl.WorkManagerInitializer needs to be removed
   from the
   AndroidManifest.xml file.
我不确定为什么在2.2.0中没有出现这样的错误,因为“按需初始化”是从2.1.0开始引入的

我不确定在我的
AndroidManifest.xml
中包含以下内容是否正确

<provider
    android:name="androidx.work.impl.WorkManagerInitializer"
    android:authorities="${applicationId}.workmanager-init"
    tools:node="remove" />
如何构建WorkManager
应用程序
类为空时,“默认初始化”(
WorkManager.getInstance()
)似乎也很少被执行

通过包含以下
提供程序
,我可以轻松消除APK导出过程中的错误。但是,这样做对吗

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

工作管理器初始化器
用于为
工作管理器
提供上下文。这是因为内容提供程序在
应用程序
之前初始化(请参阅)。这就是如果进行自定义初始化,您需要自己提供上下文的原因。因此,如果使用自定义初始化,则不需要它

如果您正在从调用
getWorkManager
方法,那么您的应用程序实例将为
null
。要解决此问题,只需通过在内容提供程序内调用
getContext
将上下文作为参数传递给方法:

public static WorkManager getWorkManager(Context context) {
    return WorkManager.getInstance(context);
}

我们在WorkManager
2.3.0-*
中引入了此lint规则。我们试图用此Lint规则解决的问题是,如果您同时拥有
WorkManagerInitializer
内容提供程序
,并且您的
应用程序
子类型实现了
配置。提供程序
(用于按需初始化)-
内容提供程序
将始终优先

这可能是意外的,尤其是当您有额外的
配置
时,由于
ContentProvider
始终使用默认配置,因此该配置将不会生效


您真正需要做的就是删除默认提供程序。这样,初始化将不再迫切,而是按需进行。

是的,如果您想使用,您需要删除默认的work manager初始值设定项,因此请在清单中保留以下代码:

<provider
   android:name="androidx.work.impl.WorkManagerInitializer"
   android:authorities="${applicationId}.workmanager-init"
   tools:node="remove" />
只要在应用程序源代码中需要时调用
App.getWorkManager()

如果有,您可以为您的ContentProvider做一些等效的事情


PS:Interest codelabs教程退出或

在提供者标记内设置以下属性,然后再次检查。android:enabled=“false”,android:exported=“false”您从哪里调用
getWorkManager
似乎
tools:node=“remove”
是正确的方法。我们的团队采用了很久以前提到的方法,所以这不是一件新鲜事。是的。目前,我们删除了WorkManagerInitializer提供程序,并调用WorkManager.getInstance(myApplication)(myApplication是应用程序类实现Configuration.provider)。但是,在一些边缘情况下,myApplication可以为null()。当我们的应用程序类为空时,您能建议我们应该做什么吗?谢谢,那样的话你什么都不应该做。你的应用程序没有真正运行。这只是
自动备份
@Rahul为什么构建包时lint不是致命错误?
public static WorkManager getWorkManager(Context context) {
    return WorkManager.getInstance(context);
}
public class MyContentProvider extends ContentProvider {
    @Override
    public boolean onCreate() {
        WorkManager workManager = getWorkManager(getContext());
        ...
    }
    ...
}
<provider
   android:name="androidx.work.impl.WorkManagerInitializer"
   android:authorities="${applicationId}.workmanager-init"
   tools:node="remove" />
import androidx.annotation.NonNull;
import androidx.work.Configuration;
import androidx.work.WorkManager;

public class App extends MultiDexApplication implements Configuration.Provider {
    private static App APP_INSTANCE;

    @Override
    public void onCreate() {
        super.onCreate();
        APP_INSTANCE = this;
    }

    public static App getInstance() {
        return APP_INSTANCE;
    }

    @NonNull
    @Override
    public Configuration getWorkManagerConfiguration() {
        return new Configuration.Builder()
                .build();
    }

    public static WorkManager getWorkManager() {
        return WorkManager.getInstance(APP_INSTANCE);
    }
}