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, или, может быть, я ограничен в скорости. У кого-нибудь есть понимание? Заранее спасибо!

0 ответов

Другие вопросы по тегам