出于学习目的,使用 WorkManager 在 Android MVVM 应用程序中实现频繁(每 10 秒)API 轮询

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

问题:

我正在开发一个简单的 Android MVVM 应用程序用于学习目的,我需要每 10 秒从 REST API 获取数据,即使应用程序被终止也是如此。我了解 WorkManager 默认的最小重复间隔为 15 分钟,这不符合我的要求。这是我的代码结构的简化版本:

Api接口:

interface ApiInterface {
    @GET("search?country=India")
    suspend fun getUniversities() : Response<University>
}

Api实用程序:

object ApiUtilities {
    val BASE_URL = "http://universities.hipolabs.com/"

    fun getInstance() : Retrofit {
        return Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build()
    }
}

存储库:

class UniversityRepository(private val apiInterface: ApiInterface) {

    private val universityLiveData = MutableLiveData<University>()

    val university : LiveData<University>
        get() = universityLiveData

    suspend fun getUniversities() {
        val result = apiInterface.getUniversities()
        if(result.body() != null) {
            universityLiveData.postValue(result.body())
        }
    }
}

视图模型:

class UniversityViewModel(private val universityRepository: UniversityRepository): ViewModel() {

    init {
        viewModelScope.launch(Dispatchers.IO) {
            universityRepository.getUniversities()
        }
    }

    val university: LiveData<University>
        get() = universityRepository.university
}

鉴于我是初学者并且这是出于学习目的,即使应用程序被终止,每 10 秒实现频繁 API 轮询的最佳方法是什么?我研究过WorkManager,但最小间隔似乎是15分钟,这不符合我的要求。任何指导或替代方法将不胜感激。预先感谢您!

kotlin mvvm alarmmanager android-workmanager foreground-service
1个回答
0
投票

在 Android 13 及更高版本中,现在有一些新的权限,使得在应用程序被终止时进行轮询变得更加困难。

我最近对前台服务做了类似的事情。这会在应用程序中心创建一条通知,让用户知道应用程序仍在后台运行进程。

但它允许您在后台线程上执行连续代码,但前提是具有显式用户权限和可见性。

这里是关于前台服务的谷歌文档。 https://developer.android.com/guide/components/foreground-service

© www.soinside.com 2019 - 2024. All rights reserved.