强制应用关闭并在后台运行

时间:2012-01-19 03:59:14

标签: iphone multithreading multitasking

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

更新:我们已经确认似乎没有一种强制应用程序退出/进入后台并继续运行后台任务的编程方式。您可以使用exit(0)强制应用程序退出;但这会将应用程序全部杀死。但是,这个问题的大部分内容都与后台运行任务有关。我们找到了一个解决方案,允许我们的应用程序开始处理用户已设置处理的数据和处理任务。这是所需的代码。这需要添加到app delegate,并且在设备/ 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

                });
            }
        }
    }
}

3 个答案:

答案 0 :(得分:2)

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

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

许多称为Safari处理网址的应用都获得Apple批准。

要在后台获得任何时间,必须使用允许的背景模式之一(音频,位置或VOIP)正确配置应用程序;或者应用程序可以通过调用beginBackgroundTaskWithExpirationHandler方法在挂起之前请求几分钟的额外时间

答案 1 :(得分:0)

你不能在iOS的后台运行一个进程(正常工作),当应用程序退出进行任何清理时你会得到几秒钟就可以了!

答案 2 :(得分:-1)

你无法强迫应用程序进入后台,我很确定Apple的指导方针禁止你这样做。您的应用可能会做什么,它只能在后台而不是在前台?