如何在iphone sdk 3.0中实现后台任务的守护进程?

时间:2009-09-11 20:40:48

标签: iphone daemon

与qik.com或ustream.com一样,当他们将内容从iphone上传到服务器时,它可以通过守护进程运行。因此,即使退出应用程序,任务仍然在使用后台守护程序。是否有任何方法可以以相同的方式实现守护进程?谢谢 !!!

7 个答案:

答案 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)

答案 6 :(得分:0)

如果必须发送数据,我会等到在applicationWillTernimate中完成传输:据我所知,如果你阻止applicationWillTerminate中的线程,应用程序将不会退出。(如果我错了,请纠正我)。但是要小心,如果数据很大或用户的网速很低,你应该退出,然后下次继续转移。建议设置计时器以检查超时。

注意:App Store可能会拒绝此操作。