【发布时间】:2015-07-25 01:53:12
【问题描述】:
我正在使用以下代码从我的手表应用中“简单地”确定父应用的应用状态:
WatchKit 扩展:
[WKInterfaceController openParentApplication:[NSDictionary dictionary] reply:^(NSDictionary *replyInfo, NSError *error)
{
UIApplicationState appState = UIApplicationStateBackground;
if(nil != replyInfo)
appState = (UIApplicationState)[((NSNumber*)[replyInfo objectForKey:kAppStateKey]) integerValue];
//handle app state
}];
主应用:
- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *replyInfo))reply
{
__block UIBackgroundTaskIdentifier realBackgroundTask;
realBackgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
reply([NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:[[UIApplication sharedApplication] applicationState]], kAppStateKey, nil]);
[[UIApplication sharedApplication] endBackgroundTask:realBackgroundTask];
}];
reply([NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:[[UIApplication sharedApplication] applicationState]], kAppStateKey, nil]);
[[UIApplication sharedApplication] endBackgroundTask:realBackgroundTask];
}
当应用程序处于前台时,这 100% 的时间都有效。当应用程序被“最小化”或“终止”时,这可能会在 50% 的时间内工作(可能更少)。当它不起作用时,它似乎无限期地阻塞。例如,如果 1 分钟后,我启动父应用程序,调用 (openParentApplication) 立即返回状态“UIApplicationStateBackground”(在我启动应用程序之前的状态,如果我很明显应用程序不处于后台状态启动它)。
顺便说一句:我正在使用真实硬件进行测试。
我做错了什么?为什么即使我创建了后台任务,iOS 也会在接到电话后立即让我的主应用程序进入睡眠状态?这是一个完整的表演停止者。
任何想法或建议将不胜感激!
【问题讨论】:
标签: xcode watchkit blocking wkinterfacecontroller