即使应用程序处于挂起状态,如何在 ios 中运行后台服务

Posted

技术标签:

【中文标题】即使应用程序处于挂起状态,如何在 ios 中运行后台服务【英文标题】:How to run Background service in ios even when app is in suspended state 【发布时间】:2014-03-26 07:04:41 【问题描述】:

我不知道如何实现后台服务。但是在搜索互联网 我看到一些关于ios 7中引入的Background fetch Api的教程。我无法理解实现的过程。Plesae提供一些帮助。`

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    // Override point for customization after application launch.


    [application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];





    return YES;

- (void)                application:(UIApplication *)application
  performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler


    NSLog(@"hai");



    [NSTimer scheduledTimerWithTimeInterval:0.30
                                     target:self
                                   selector:@selector(sampleTest)
                                   userInfo:nil
                                    repeats:NO];
     completionHandler(UIBackgroundFetchResultNewData);


    -(void)sampleTest


    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:@"hai" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [alertView show];



仅在应用程序启动时调用,但之后 30 秒后我看不到任何警报

【问题讨论】:

您不会看到警报,这不是后台提取的用途。除非您使用静默推送通知(仅限 iOS 7),否则您无法手动触发后台提取。 iOS 会在需要时调用此方法,您可以在模拟器中通过转到 Xcode > Debug > Simulate background fetch 来模拟它。我怀疑警报是否会显示,因为您的应用不在前台。 Xcode > Debug > Simulate background fetch if I do此警报仅在模拟器启动时出现,但在处于活动状态时我看不到 应用激活时不会出现。这是一个后台提取... 我希望一些服务在应用程序运行时在后台运行,甚至处于后台状态。该怎么办。 在它运行时很容易做到。只要调用你想要的。在后台有点棘手,您的应用程序只能在后台运行 Apple 预先确定的类型,即 GPS、音频等。或者,在 iOS7 中,您可以使用静默推送通知手动触发 perormFetchWithCompletion。 (developer.apple.com/library/ios/releasenotes/General/…) - 多任务增强。但这再次受到 APNS + iOS 的限制,以避免垃圾邮件。人们不希望应用在不知情的情况下关闭后进行繁重的计算...... 【参考方案1】:

只需使用以下代码:-

- (void)applicationDidEnterBackground:(UIApplication *)application

    UIApplication  *app = [UIApplication sharedApplication];
    UIBackgroundTaskIdentifier bgTask = 0;
    bgTask = [app beginBackgroundTaskWithExpirationHandler:^
        [app endBackgroundTask:bgTask];
    ];

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    // Override point for customization after application launch.
    [application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];

【讨论】:

以上是关于即使应用程序处于挂起状态,如何在 ios 中运行后台服务的主要内容,如果未能解决你的问题,请参考以下文章

静默推送通知是不是能够唤醒 ios 中处于未运行状态的应用程序?

iOS开发:后台运行以及保持程序在后台长时间运行

在 iOS 13 设备中无法在后台/挂起状态下接收 VoIP 消息

即使用户杀死应用程序,NSURLSessionDownloadTask 也会继续下载

.NET HttpClient 在多次请求后挂起(除非 Fiddler 处于活动状态)

为啥没有一个 Windows 10 应用程序处于挂起状态