在我的Apple Watch应用程序中,我正在向位置服务和Web服务发出请求。在iPhone上执行这两项任务大约需要2秒钟。但是,当我从Apple手表发出相同的请求时,我得到回复需要10秒以上...除非iPhone应用程序已经运行,否则请求大约需要2秒。
我认为application:handleWatchKitExtensionRequest:reply:
中的后台任务有问题,但我无法弄清楚是什么。所有提示都很受欢迎。
- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply
{
__block UIBackgroundTaskIdentifier identifier = UIBackgroundTaskInvalid;
dispatch_block_t endBlock = ^ {
if (identifier != UIBackgroundTaskInvalid) {
[application endBackgroundTask:identifier];
}
identifier = UIBackgroundTaskInvalid;
};
identifier = [application beginBackgroundTaskWithExpirationHandler:endBlock];
reply = ^(NSDictionary *replyInfo) {
reply(replyInfo);
endBlock();
};
// Call location services with completion block ^{
// Use the location and make request to web service
// with completion ^{
// reply(@{@"info" : @"here be dragons"});
// };
//};
}
答案 0 :(得分:0)
为了节省电量,Apple手表限制了定位服务(主要耗电量)的更新频率。当您打开iPhone应用程序时,您可以优先处理您正在运行的任务,Apple Watch会更频繁地更新其位置。
您可以尝试通过发送"唤醒"来强制应用程序更快地更新ping:向应用程序发送空/虚拟调用并使用虚拟回复进行回复。这应该唤醒连接一段时间,你的第二个电话可能会被更快地处理,虽然我不确定这是否"醒来" ping将优先考虑位置服务。
最后一件事,恕我直言10秒并不真是一个荒唐的"时间量。