与qik.com或ustream.com一样,当他们将内容从iphone上传到服务器时,它可以通过守护进程运行。因此,即使退出应用程序,任务仍然在使用后台守护程序。是否有任何方法可以以相同的方式实现守护进程?谢谢 !!!
答案 0 :(得分:9)
iPhone OS不允许您添加后台进程。
答案 1 :(得分:6)
更有可能的是,在退出时,他们保存状态,然后在启动恢复时转移。
答案 2 :(得分:5)
在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];
}
这应该可以让你完成你的工作。仅限越狱。
答案 3 :(得分:2)
不幸的是,您无法使用iPhone SDK创建后台进程。您只能在应用运行时上传数据。
答案 4 :(得分:1)
守护进程服务是最好的服务,而不是iphone中后台处理的其他服务或概念。请访问以下链接
http://chrisalvares.com/blog/?tag=iphone-daemon
答案 5 :(得分:1)
另见Apple的Executing Code in the Background。
答案 6 :(得分:0)
如果必须发送数据,我会等到在applicationWillTernimate中完成传输:据我所知,如果你阻止applicationWillTerminate中的线程,应用程序将不会退出。(如果我错了,请纠正我)。但是要小心,如果数据很大或用户的网速很低,你应该退出,然后下次继续转移。建议设置计时器以检查超时。
注意:App Store可能会拒绝此操作。