2012-01-19 114 views
2

我们有一个应用程序,该应用程序具有需要退出的特定用途。退出后,进程需要在后台运行一段时间或直到完成。我们只需要知道如何以编程方式强制应用程序进入后台可以继续运行的背景。任何帮助都会很棒!提前致谢!强制关闭应用程序并在后台运行

更新:我们已确认,似乎没有强制应用程序退出/进入后台并继续运行后台任务的程序化方式。您可以使用exit(0)强制应用程序退出;但这会一起杀死应用程序。但是,这个问题的大部分都涉及到后台运行任务。我们找到了一种解决方案,可让我们的应用程序开始处理数据并处理用户已设置好的待处理任务。这是所需的代码。这需要添加到应用程序委托中,并且需要在设备/ IOS上执行多任务处理。

- (void)applicationDidEnterBackground:(UIApplication *)app{ 
    // Check that IOS supports multitasking 
    if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]){ 
     // Check that the device supports multitasking 
     if ([[UIDevice currentDevice] isMultitaskingSupported]) { 
     // Custom setting to allow users the freedom to enable or disable background tasks 
     BOOL enabled = [[NSUserDefaults standardUserDefaults] boolForKey:@"backgroundTasksEnabled_key"]; 
      if (enabled){ 
       //Get the shared application instance 
       backGroundApp = [UIApplication sharedApplication]; 
       background_task = [backGroundApp beginBackgroundTaskWithExpirationHandler:^{ 
        [backGroundApp endBackgroundTask: background_task]; 
        background_task = UIBackgroundTaskInvalid; 
       }]; 

       // Run in background 
       dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

        NSLog(@"\n\nProcess background tasks!\n\n"); 

        // Do your work here 

       }); 
      } 
     } 
    } 
} 
+0

对于那些寻找解决方案的人,可以使用私有API,[请参阅此答案](http:// stackoverflow。 COM /一个/119114分之15997772)。 – Nate

回答

2

您可以通过向另一个应用程序发送注册的URL来强制iOS应用程序进行后台处理,例如Safari的网站URL。

[[UIApplication sharedApplication] openURL:[NSURL URLWithString: myWebsiteURL ]]; 

很多很多调用Safari来处理URL的应用程序都是由Apple批准的。

要在后台获得任何时间,应用程序必须使用允许的背景模式(音频,位置或VOIP)进行适当配置;或者应用程序可以在通过调用beginBackgroundTaskWithExpirationHandler方法暂停后在后台请求几分钟的额外时间。

+0

那么,你会说,我发布的上述代码是一个适当的解决方案,可能需要2-3分钟的后台处理吗?据我所知,这是苹果公司认可的方法,但也许你可以证实?非常感谢。 – mejim707

0

你不能运行在iOS上的背景(做功)的过程,你会得到几秒钟,当应用程序退出做任何清理,这就是它!

-1

你不能强制应用程序进入后台,我相当肯定苹果的准则禁止你这样做。你的应用程序可能会做什么,它只能在后台执行,而不能在前台执行?

+0

嗯,这并不是说它不能在前台执行一个进程,并且需要后台进程,这是因为我们希望用户有能力做他们必须做的事情,并且应用程序会在他们继续或与他们一起处理剩余事件工作或玩耍等等。只需真正快速进出,无需等待流程完成。我们已经看到很多人说这不是一个好主意,关闭应用程序或强制后面。现在,我已经让应用程序运行一个进程,在所有事情完成后获得确认,然后自动关闭。但是,如果主页按钮被击中,则进程暂停。 TX – mejim707

+1

应用程序不应该强制关闭自己。响应用户关闭应用程序,不要让它自己发生。还要看看Apple的多任务指南,如果需要,您应该能够指定后台进程。 – Seventoes