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

dvc*_*vch 5 iphone daemon

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

Rud*_*udi 9

iPhone OS不允许您添加后台进程.

  • 这将随iPhone OS 4.0而改变.您现在可以请求操作系统让您的应用程序运行几分钟,或者注册一些事件(位置更改)以唤醒您的应用程序. (3认同)

Jor*_*dan 6

更有可能的是,在退出时,他们保存状态,然后在启动恢复他们转移.


Mik*_*hen 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
Run Code Online (Sandbox Code Playgroud)

在main.m

    int retVal = UIApplicationMain(argc, argv, @"MyApplication", nil);
Run Code Online (Sandbox Code Playgroud)

代表:

- (void)applicationWillTerminate:(UIApplication *)application
{
    [(MyApplication*)application setIsApplicationSupposedToTerminate:!kIsTransferDone];
}
Run Code Online (Sandbox Code Playgroud)

这将阻止申请终止,除非您的转移已完成.设置检查超时的计时器很重要.在applicationDidReceiveMemoryWarning:中,通过以下方式退出您的应用:

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application { [(MyApplication*)application setIsApplicationSupposedToTerminate:YES]; [application terminateWithSuccess]; }

这应该可以让你完成你的工作.仅限越狱.