5

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

4

7 回答 7

9

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

于 2009-09-11T20:45:33.770 回答
6

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

于 2009-09-11T23:10:22.003 回答
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]; }

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

于 2009-09-14T13:23:31.430 回答
2

不幸的是,您不能使用 iPhone SDK 创建后台进程。您只能在应用程序运行时上传数据。

于 2009-09-11T20:46:32.220 回答
1

守护进程服务是最好的服务,而不是其他服务或iphone后台处理的概念。请访问以下链接
http://chrisalvares.com/blog/?tag=iphone-daemon

于 2010-02-23T14:48:09.820 回答
1

另请参阅 Apple在后台执行代码

于 2011-04-01T06:43:17.747 回答
0

如果必须发送数据,我会等到在 applicationWillTernimate: 中完成传输。据我所知,如果您阻止 applicationWillTerminate 中的线程,应用程序将不会退出。(如果我错了,请纠正我)。但请注意,如果数据量很大或用户的网速很差,您还是应该退出,下次继续传输。建议设置一个计时器来检查超时。

注意:这可能会被 App Store 拒绝。

于 2009-09-12T04:00:32.430 回答