如何在iOS 8中应用程序处于后台状态时连续执行任务

Posted

技术标签:

【中文标题】如何在iOS 8中应用程序处于后台状态时连续执行任务【英文标题】:How to Execute a task continuously when application is in Background state in iOS 8 【发布时间】:2015-03-24 04:00:14 【问题描述】:

我编写以下代码用于在应用程序处于后台状态时执行任务,它在 ios 7 中运行良好,但在 iOS 8 中无法运行。 当应用程序处于后台状态时,有人可以给我解决方案以在 iOS 8 中连续执行任务。

- (void)applicationDidEnterBackground:(UIApplication *)application 

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

【问题讨论】:

尝试使用 NSTimer。它将在后台运行 10 分钟..! 我投了赞成票,希望也能在我的回答中得到它 【参考方案1】:

无法在后台连续执行任务(少数情况除外)。

大多数应用都可以很容易地进入扩展状态,但也有 也是应用程序继续运行的正当理由 背景。 iOS提供的技术分为三种 类别:

    在前台启动短任务的应用程序可以请求时间 当应用程序移动到后台时完成该任务。 在前台启动下载的应用程序可以将这些下载的管理移交给系统,从而允许应用程序暂停或 下载继续时终止。 需要在后台运行以支持特定类型任务的应用可以声明其支持一种或多种后台执行模式。

对于需要更多执行时间来执行的任务,您必须 请求特定权限以在后台运行它们,而无需 他们被停职。在 iOS 中,只允许特定的应用类型 在后台运行:

    在后台向用户播放有声内容的应用程序, 比如音乐播放器应用 在游戏中录制音频内容的应用程序 背景 让用户随时了解其位置的应用程序 时间,例如导航应用程序 支持互联网语音的应用程序 协议 (VoIP) 需要下载和处理新内容的应用程序 定期 从外部附件接收定期更新的应用

实现这些服务的应用必须声明它们所使用的服务 支持和使用系统框架来实现相关方面 那些服务。声明服务让系统知道哪个 您使用的服务,但在某些情况下,它是系统框架 实际上可以防止您的应用程序被暂停。

【讨论】:

在我的情况下,我必须每 20 秒将我的位置发送到服务器。有可能吗? 是的,这可以通过 NSURLSession “后台上传”来实现。您还需要为应用程序启用“后台位置更新”。请参阅本教程(您需要结合使用 NSURLSession 和后台位置更新):raywenderlich.com/51127/nsurlsession-tutorial【参考方案2】:

是的,我在实施 ibeacon 时实施了背景条件。委托被设置在界面

@interface HomeMainVC ()<ESTBeaconManagerDelegate>

如果用户通过以下功能进入或存在信标区域,我能够发送本地通知。所以必须有某种方法可以将用户位置发送到。

//Beacon manager did enter region
- (void)beaconManager:(ESTBeaconManager *)manager didEnterRegion:(ESTBeaconRegion *)region


//Beacon Manager did exit the region
- (void)beaconManager:(ESTBeaconManager *)manager didExitRegion:(ESTBeaconRegion *)region

您使用了以下代码,但它仅在应用程序发送到后台模式时调用一次,因此您无法使用它。如果你只想在后台模式下做一些事情,那么它对你很有用。

- (void)applicationDidEnterBackground:(UIApplication *)application 

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

【讨论】:

你能不能简单解释一下。 简要介绍什么信标或 - (void)applicationDidEnterBackground:(UIApplication *)application 简单介绍一下Beacon。 我已经实现了 ibeacon 来检测用户在后台和前台模式下进入特定位置。在前台心情下,当应用程序运行时,通过在应用程序中发送包含所需信息的弹出窗口来通知用户。当应用程序处于后台状态时,应用程序未运行,本地通知会通知用户所需的信息。想详细了解iBeacon的可以看estimote.com。

以上是关于如何在iOS 8中应用程序处于后台状态时连续执行任务的主要内容,如果未能解决你的问题,请参考以下文章

应用程序处于后台时状态栏下方的 IOS 文本

如何在后台保持 iphone ios websocket 连接处于活动状态?

iOS 应用程序如何在后台无限期地保持 TCP 连接处于活动状态?

用于在后台检查电池电量的 iOS 应用程序

当应用程序处于状态后台或被杀死时,如何在不点击通知的情况下存储 iOS 远程通知?

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