如何使用前台服务更改数据?

问题描述 投票:0回答:0

我正在建立前台服务取决于 3 个州。 待定、进行中、完成

此状态带有新数据。状态来自特定 API 的后端,我们称之为:

getStateWithData: GetStateWithDataRepository

所以基本上我调用特定请求来获取数据。

我可以运行前台服务,通过从

request
调用这个
viewmodel
来更改数据,然后我创建一个包含新数据的通知一切正常,但是当我关闭我的应用程序当然前台服务仍在运行,但我没有改变我的数据,因为我不再调用 repo。

我的问题是我应该如何实现额外的元素,比如: CoroutineWorker,我将在其中调用数据请求,然后使用前台服务更改通知。 我很不明白我应该只向服务注入

worker
吗?:

// should I add here repo to params?
class MyManager(context: Context) {

// should I just inject workManager, I wanted to add it to another class, but then I couldn't add this MyManager to ViewModel, I have had some problems to inject.

Should I make something like: 
val workManager: WorkManager by inject()

// I Call this method from viewmodel to trigger foregrouund service
    fun sendCommandToService(
        action: String
    ): Intent = Intent(context, NotificationService::class.java).also {
        it.action = action
        it.putExtra(
            "value",
            "valueIsend"
        )

        context.startService(it)
    }
}

另外,根据我的理解,当后端数据发生变化时,我的

ktor
请求将监听这些变化,我可以自动使用这种方法吗?我究竟应该如何实施某种
api request
的听众? 是的,这部分来自后端请求的监听器我不太确定。 通常,我会建议无声通知来编辑数据,但我不确定它是否可以不同地工作。

我做了类似的事情:

    worker { params ->
        NotificationWorkManager(
            androidApplication().applicationContext,
            params[0]
        )
    }

    single<NotificationManagerImpl> { NotificationManagerImpl(androidApplication().applicationContext, get()) }

...但我无法将它注入 viewModel 我不知道为什么,没有

workmanager
类它有效

来自进口:

/**
 * Declare a worker
 *
 * @author : Fabio de Matos
 * @author Arnaud Giuliani
 **/
inline fun <reified T : ListenableWorker> Module.worker(
    qualifier: Qualifier = named<T>(),
    noinline definition: Definition<T>
): KoinDefinition<T> {
    val factory = factory(qualifier, definition)
    factory.bind(ListenableWorker::class)
    return factory
}

在模块中

    viewModelOf(::MyViewModel)

来自扩展

/**
 * @see viewModelOf
 */
inline fun <reified R : ViewModel, reified T1, reified T2, reified T3, reified T4, reified T5, reified T6, reified T7, reified T8, reified T9, reified T10> Module.viewModelOf(
    crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R,
    noinline options: DefinitionOptions<R>? = null,
): KoinDefinition<R> = viewModel { new(constructor) }.onOptions(options)
android kotlin service backend listener
© www.soinside.com 2019 - 2024. All rights reserved.