如何在Android Kotlin中每5秒致电API?

问题描述 投票:0回答:1
“我正在开发一个Android应用程序,需要每5秒钟调用API以获取更新的数据。我目前正在尝试使用处理程序,但似乎并不能可靠地工作。

我还尝试使用Coroutine和Workmanager,但我不确定哪种最适合常见的API呼叫。

private var mTimer: Timer? = null private var mTimerTask: TimerTask? = null private fun startApi(interval: Long, device_code: String) { mHandler = Handler(Looper.getMainLooper()) mTimer = Timer() mTimerTask = object : TimerTask() { override fun run() { println("API called at: ${Date()}") mHandler?.post { getAuthenticationToken(device_code) } } } mTimer?.schedule(mTimerTask, 0, interval * 1000) } fun getAuthenticationToken(devie_code: String) { val clientToken = Auth0ClientToken(BuildConfig.CLIENT_ID, devie_code, BuildConfig.GRANT_TYPE) auth0ViewModel.getAuth0AccessToken(clientToken).observe(this@MainActivity) { when (it) { is Resource.Loading -> { Log.e(TAG, "getAuthenticationToken Resource.Loading") } is Resource.Success -> { it.data.let { response -> if (!response?.access_token.isNullOrEmpty()) { PrefUtils(this).putString(PrefUtils.Auth, response?.id_token.toString()) PrefUtils(this).putString(PrefUtils.Auth0AccessToken, response?.access_token.toString()) PrefUtils(this).putString(PrefUtils.AuthRefreshToken, response?.refresh_token.toString()) Log.e( TAG, "getAuthenticationToken Resource.Success---> access token : ${ GsonBuilder().setPrettyPrinting().create().toJson(response) }" ) Log.e( TAG, "getAuthenticationToken Resource.Success---> id_token : ${ GsonBuilder().setPrettyPrinting().create() .toJson(response?.id_token.toString()) }" ) Log.e( TAG, "Pref Token ${ GsonBuilder().setPrettyPrinting().create() .toJson(PrefUtils(this@MainActivity).getString(PrefUtils.Auth,"")) }" ) stopBackgroundTask() startActivity(Intent(this, HomeActivity::class.java)) finish() } }

                
你不。 这样的投票对于电池性能来说是非常差的。 您会干燥用户。 取而代之的是,您应该考虑在有新数据下载时从服务器实现推送消息,以告知用户,然后仅下载。
android api timer retrofit handler
1个回答
0
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.