像 qik.com 或 ustream.com 一样,当他们将内容从 iphone 上传到服务器时,它通过 daemon 工作。因此,即使退出应用程序,任务仍然在后台守护进程中运行。有什么方法可以以相同的方式实现守护进程吗?谢谢 !!!
7 回答
iPhone OS 不允许您添加后台进程。
更有可能的是,在退出时,他们保存状态,然后在启动恢复时转移。
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
在 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。
另请参阅 Apple在后台执行代码。
如果必须发送数据,我会等到在 applicationWillTernimate: 中完成传输。据我所知,如果您阻止 applicationWillTerminate 中的线程,应用程序将不会退出。(如果我错了,请纠正我)。但请注意,如果数据量很大或用户的网速很差,您还是应该退出,下次继续传输。建议设置一个计时器来检查超时。
注意:这可能会被 App Store 拒绝。