ios - HealthKit锻炼查询似乎真的很慢

标签 ios ios9 healthkit hkhealthstore hksamplequery

我有一些代码正在从healthkit查询数据。我们从保健包以及最近的锻炼中获得各种样本和数量。在我的手机上(通常每天进行一次锻炼-尽管基础将事情存储为多次锻炼),锻炼查询大约需要8秒钟,但所有其他类型的查询都在不到一秒钟的时间内完成。

看起来,这个查询实际上是在进行线性扫描,对其他索引进行索引或其他操作。想知道是否有人遇到了这个问题或有什么想法?

NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:[self dateByCalculatingWithNumberOfDays:-1 date:[NSDate date]]
                                                           endDate:[NSDate date]
                                                           options:HKQueryOptionStrictStartDate | HKQueryOptionStrictEndDate];

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:HKSampleSortIdentifierStartDate ascending:NO];

HKSampleQuery *query = [[HKSampleQuery alloc] initWithSampleType:[HKSampleType workoutType]
                                                       predicate:predicate
                                                           limit:0
                                                 sortDescriptors:@[sortDescriptor]
                                                  resultsHandler:^(HKSampleQuery *query, NSArray *results, NSError *error) {

    self.workoutEntries = [[NSMutableArray alloc] initWithCapacity:results.count];
    for (HKWorkout *workout in results) {
        WorkoutObject *workoutObject = [WorkoutObject workoutObjectWithWorkout:workout];
        [self.workoutEntries addObject:workoutObject];
    }
    [self fetchHeartRate];
}];
[self.healthStore executeQuery:query];

最佳答案

我做了一些孤立的锻炼查询,发现它们实际上非常快。

事实证明,我们HealthKit同步的前一个阶段似乎导致锻炼查询花费很长时间。

具体来说,我们每天查询约25个指标;导致提交约250条查询。该工作量全部处于异步块中,因此在提交锻炼查询后仍继续进行;看起来好像要花很长时间。

解决方案是每天不查询,而是连续多次查询一次,返回按天分组的结果,例如:Get total step count for every date in HealthKit

检修的一部分还包括更好地利用GCD组来管理整个任务的完成,并使用组输入和组离开功能跟踪各种未完成的 call 。这两个变化大大改善了情况。

关于ios - HealthKit锻炼查询似乎真的很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35164136/

相关文章:

ios - 如何向 uuid 不可用的测试人员提供 iOS 应用程序

ios - XCode:如何删除 iPhone 上的调试应用程序而不删除所有文档?

ios - 显示键盘并且键盘顶部的预测文本框被切换 View swift 上升,给用户留下黑屏

ios - 如何快速更改 UIbutton 的左半径

ios - SFSafariViewController 重定向不工作

android - 通过 FHIR 与医院集成 - 访问医院 FHIR 服务器

ios - AppCode 目标设备系列无效 (iPad iOS 8.1)

swift - 我可以让眼睛包含在 ARSCNFaceGeometry 中(从 VNFaceLandmarkRegion2D 获取 3D 瞳孔坐标)吗?

swift - 锻炼构建器和锻炼构建器DidCollectEvent从未被调用

ios - 在 WatchKit 应用中处理 Apple Watch 传感器数据