像qik.com或ustream.com一样,当他们从iPhone上传内容到服务器时,它是通过守护进程工作的。因此,即使退出了应用程序,后台守护进程仍然在运行任务。是否有任何方法可以以相同的方式实现守护进程过程?谢谢!
iPhone OS不允许您添加后台进程。
(意思是iPhone操作系统不支持添加后台进程)在applicationWillTerminate:中阻塞线程不会立即被终止,但将被App Store拒绝。对于非AppStore或个人应用程序,这里是代码:
@interface MyApplication : UIApplication
{
BOOL _isApplicationSupposedToTerminate;
}
@property (assign) BOOL isApplicationSupposedToTerminate;
- (void)_terminateWithStatus:(int)status;
@end
@implementation MyApplication
@synthesize isApplicationSupposedToTerminate = _isApplicationSupposedToTerminate;
- (void)_terminateWithStatus:(int)status
{
if (self.isApplicationSupposedToTerminate) {
[super _terminateWithStatus:status];
}
else {
return;
}
}
@end
In main.m
int retVal = UIApplicationMain(argc, argv, @"MyApplication", nil);
委托:
- (void)applicationWillTerminate:(UIApplication *)application
{
[(MyApplication*)application setIsApplicationSupposedToTerminate:!kIsTransferDone];
}
这将防止应用程序在传输完成前终止。设置一个检查超时的定时器非常重要。在applicationDidReceiveMemoryWarning:中,通过以下方式退出应用程序:
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
[(MyApplication*)application setIsApplicationSupposedToTerminate:YES];
[application terminateWithSuccess];
}
这应该能帮助您完成工作。仅适用于越狱设备。
很遗憾,使用iPhone SDK无法创建后台进程。只能在应用程序运行时上传数据。
在 iPhone 后台处理中,守护进程服务是比其他服务或概念更好的服务。请访问以下链接
http://chrisalvares.com/blog/?tag=iphone-daemon。
applicationWillTerminate:
中阻塞的时间超过一定时间(通常约为五秒钟左右),苹果实际上保留终止应用程序的权利。此外,如果您阻塞的时间超过了这个时间并且应用程序确实被杀死了,它将失去应用程序正常退出时具有的漂亮淡出转换效果;相反,对于用户来说,它看起来像是一个崩溃(应用程序只是消失了,设备再次呈现SpringBoard)。 - Tim