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

u1ehiz5o  于 2023-10-23  发布在  Kotlin
关注(0)|答案(1)|浏览(156)

问题:

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

API接口:

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

ApiUtilities:

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())
        }
    }
}

ViewModel:

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分钟,这不符合我的要求。任何指导或替代方法都将非常感谢。在此先谢谢您!

30byixjq

30byixjq1#

随着Android 13和更高版本的推出,现在有一些新的权限,使得在应用程序被杀的情况下更难进行投票。
我最近在前台服务上做了类似的事情。这会在应用中心创建一个通知,让用户知道应用仍在后台运行一个进程。
但它允许你在后台线程上执行连续的代码,但只有在显式的用户权限和可见性下。
Google Docs on Foreground服务https://developer.android.com/guide/components/foreground-service

相关问题