我正在尝试无限期地运行应用程序..我正在开发一个内部应用程序,因此苹果批准并不重要。
我尝试了一些不同的东西,包括使用本教程模拟一个voip应用程序..
http://www.raywenderlich.com/29948/backgrounding-for-ios
最终我在网上遇到了这段代码
[application beginBackgroundTaskWithExpirationHandler:^{}];
我将其放在beginBackgroundTaskWithExpirationHandler
中,然后在application:didFinishLaunchingWithOptions
-(void)caller{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 3 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
NSTimeInterval timeRemaining = [UIApplication sharedApplication].backgroundTimeRemaining;
NSLog(@"%f", timeRemaining);
[self caller];
});
}
这会记录每3秒剩余的后台时间。当我退出我的应用程序时它会这样做..我看到从180(3分钟)到最终0的倒计时
然后它只是无限期地记录0。我想如果后台时间达到零,那么我的进程就不会执行。
任何人都知道这里发生了什么?
答案 0 :(得分:0)
如果您使用beginBackgroundTaskWithExpirationHandler
并从Xcode启动应用程序,那将改变此UIBackgroundTaskIdentifier
的行为(Xcode将使应用程序保持活动状态)。如果您在Xcode的调试控制台中看到日志消息,则表示该应用程序是通过Xcode在设备上启动的。
现在应用程序已安装在设备上,请将其停止(通过点击Xcode中的" stop"按钮或通过设备上的Springboard手动终止应用程序)。一旦您确认该应用未运行,您现在可以通过点击设备本身上的应用图标再次运行该应用。它应该以任何方式启动,而不是与Xcode链接。
尽管现在该应用程序尚未通过Xcode运行,但您仍然可以通过访问Xcode" Device Organizer"来监控所记录内容的进度,并且打开实际设备的控制台。我怀疑你会看到后台任务到期,就像你期望的那样。