HealthKit 锻炼查询似乎真的很慢
Posted
技术标签:
【中文标题】HealthKit 锻炼查询似乎真的很慢【英文标题】:HealthKit Workout Queries seem really slow 【发布时间】:2016-02-02 21:30:07 【问题描述】:我有一些从 healthkit 查询数据的代码。我们从 healthkit 以及最近的锻炼中获得了各种样本和数量。在我的手机上(通常是每天一次锻炼 - 尽管 Basis 将内容存储为多次锻炼),锻炼查询大约需要 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];
【问题讨论】:
还有哪些其他查询(示例查询、锚定对象、统计信息)? 我还觉得选择锻炼很慢。如果艾伦想要,我会衡量的。在几乎没有锻炼数据的手表上可能需要 1-2 秒。在 6plus 上:1-2 秒选择最近的大约 100 次锻炼。 【参考方案1】:我做了一些孤立的锻炼查询,发现它们实际上非常快。
事实证明,我们的 HealthKit 同步的前一个阶段导致锻炼查询需要很长时间。
具体来说,我们每天要查询大约 25 个指标;导致提交 250 个查询。该工作负载都在异步块中,因此在提交锻炼查询后仍在继续;这使它看起来需要很长时间。
解决方案不是每天查询,而是在多天内执行一次查询,返回按天分组的结果 - 像这样:Get total step count for every date in HealthKit
部分检修还涉及更好地使用 GCD 组来管理整体任务的完成情况,并使用组进入和组离开功能跟踪各种未完成的呼叫。这两个变化大大改善了事情。
【讨论】:
以上是关于HealthKit 锻炼查询似乎真的很慢的主要内容,如果未能解决你的问题,请参考以下文章