如何解决如何在 workManager 中发出 API 请求?
我正在尝试使用 WorkManager 定期从 API 中检索通知计数,问题是我正在使用 hilt 进行依赖项注入,因此我无法使用“@Inject”注入我的存储库,即使我使用@AndroidEnteryPoint。以及如何在“doWork”函数中观察检索到的数据。
ScreenToWorld
解决方法
您需要通过构造函数注入您的依赖项。为了使用 Hilt 启用对 Worker 的注入,您需要执行以下操作。
首先,注释您的 Worker、其构造函数和构造函数参数:
@HiltWorker
class MyWorker @AssistedInject constructor(
@Assisted context: Context,@Assisted workerParameters: WorkerParameters,private val repository: Repository
) : CoroutineWorker(context,workerParameters)
您应该只将 context
和 workerParameters
注释为 @Assisted
。您的所有其他依赖项均由 Hilt 解析,它们必须安装在 SingletonComponent
中或未设置范围。
然后将 HiltWorkerFactory
注入您的主 Application
派生类,并使此类实现 Configuration.Provider
接口,如下所示:
@HiltAndroidApp
class MainApplication : Application(),Configuration.Provider {
@Inject
lateinit var workerFactory: HiltWorkerFactory
override fun getWorkManagerConfiguration() =
Configuration.Builder()
.setWorkerFactory(workerFactory)
.build()
}
最后一步是禁用默认的 WorkManager 初始化。为此,如果您使用的是 2.6.0-alpha01 或更高版本的 WorkManager,请将这些行插入您的 AndroidManifest.xml
:
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities=\"${applicationId}.androidx-startup"
android:exported="false"
tools:node=\"merge">
<!-- If you are using androidx.startup to initialize other components -->
<meta-data
android:name="androidx.work.impl.WorkManagerInitializer"
android:value="androidx.startup"
tools:node="remove" />
</provider>
或
<!-- If you want to disable android.startup completely. -->
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove">
</provider>
如果您使用的是旧版本,则应添加:
<provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
tools:node="remove" />
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。