Android Health Connect зависает при выполнении запроса через 15 секунд
Я использую Health Connect для чтения записей, таких как шаги и упражнения. Я использую Health Connect в нескольких разных местах Kotlin, и обычно код выглядит примерно так:
suspend fun fetchStepData(
healthConnectClient: HealthConnectClient,
viewModel: StepViewViewModel,
): StepViewViewModel {
kotlin.runCatching {
val todayStart = Instant.now().atZone(ZoneId.systemDefault()).toLocalDate().atStartOfDay();
val response: ReadRecordsResponse<StepsRecord>
try {
response = healthConnectClient.readRecords(
ReadRecordsRequest(
StepsRecord::class,
timeRangeFilter = TimeRangeFilter.after(todayStart)
)
)
var steps: Long = 0;
if (response.records.isNotEmpty()) {
for (stepRecord in response.records) {
steps += stepRecord.count
}
}
return viewModel
} catch (e: Exception) {
Log.e("StepUtil", "Unhandled exception, ", e)
}
}
return viewModel
}
У меня есть функция обновления, которая запускается при изменении фокуса, чтобы убедиться, что приложение находится на переднем плане.
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
if (hasFocus) {
binding.root.invalidate()
val fragment =
supportFragmentManager.findFragmentById(R.id.nav_host_fragment_activity_main)?.childFragmentManager?.primaryNavigationFragment
if (fragment is MyFragment) {
displayLoadingIndicator(true)
runBlocking {
if (fragment.fetchStepData(this@MainActivity.healthConnectClient, fragment.getViewModel()) != null) {
displayLoadingIndicator(false)
}
}
}
У меня есть индикатор загрузки, когда я извлекаю данные. Я использую ящик, и если я подожду около 15 секунд и нажму кнопку ящика, соответствующуюMyFragment
, приложение зависает на индикаторе загрузки, так и не закрыв его.
Я пытался пройти через приложение в режиме отладки, и когда я это делаю, я всегда зависаю.
response = healthConnectClient.readRecords(
ReadRecordsRequest(
StepsRecord::class,
timeRangeFilter = TimeRangeFilter.after(todayStart)
)
)
вfetchStepData
. В какой-то момент мое приложение делало несколько запросов наHealthConnectClient.getOrCreate(context)
, но с тех пор я объединил их в один вызов инстанцирования. Я думаю, что могу неправильно читать данные, и, возможно, мне нужно использоватьgetChanges
, или, может быть, я ограничен в скорости. У кого-нибудь есть понимание? Заранее спасибо!