我还尝试使用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()
}
}
你不。 这样的投票对于电池性能来说是非常差的。 您会干燥用户。 取而代之的是,您应该考虑在有新数据下载时从服务器实现推送消息,以告知用户,然后仅下载。