美文网首页iOS
iOS学习之APP后台运行

iOS学习之APP后台运行

作者: 龙马君 | 来源:发表于2016-05-23 09:31 被阅读612次

最近在做一个后台监控流量的工具,需要APP进入后台后,仍然可以执行代码进行统计,但是iOS不像Android那样有后台服务,进入后台后,一定时间后就会被挂起。网上查了一些资料,在这里整理记录下。
苹果提供了一下几种方式:
1.Audio and AirPlay
2.Location updates
3.Voice over IP
4.Newsstand downloads
5.External accessory communication
6.Uses Bluetooth LE accessories
7.Background fetch
8.Remote notifications

要使用它需要在Capabilities的Background Modes选中相应的项。

Paste_Image.png

我主要用到了2和7.
Location updates应用退到后台后,还可以得到系统定位更新,从而执行一些代码。
1.导入CoreLocation.framework,然后引用头文件
2.开始定位

-(void)startLocation{
    _locationManager = [[CLLocationManager alloc] init];
    // 定位服务是否打开
    if ([CLLocationManager locationServicesEnabled]) {
        NSLog(@"开始执行定位服务");
        _locationManager.desiredAccuracy = kCLLocationAccuracyBest;
        _locationManager.distanceFilter = 5;
        _locationManager.delegate = self;
        // 权限申请
        if (IS_OS_8_OR_LATER) {
            //[_locationManager requestWhenInUseAuthorization];
            [_locationManager requestAlwaysAuthorization];
        }
        
        [_locationManager startUpdatingLocation];
    }
}

3.在Info.plist文件中添加如下配置:
(1)NSLocationAlwaysUsageDescription
requestAlwaysAuthorization权限提示的文本信息
(2)NSLocationWhenInUseUsageDescription
requestWhenInUseAuthorization权限提示的文本信息
如果不设置这两参数,是不会有权限提示,也不会后台得到更新的消息。

Paste_Image.png
Paste_Image.png

4.设置实现代理CLLocationManagerDelegate

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
    NSLog(@"定位更新 统计流量");
    [self startOneFlowStatistic];
}

-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
    NSLog(@"定位失败: %@", error);
}

Background fetch是iOS7新增的,在后台iOS在间隔时间内后台启动该应用。
1.设置间隔时间执行

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
...
}

2.实现回调方法

-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
    NSLog(@"performFetchWithCompletionHandler");
    [[FlowMonitorService shareFlowMonitorService] startOneFlowStatistic];
    completionHandler(UIBackgroundFetchResultNewData);
}

参考地址:
iOS后台运行实现总结 http://www.jianshu.com/p/d3e279de2e32
iOS开发:后台运行以及保持程序在后台长时间运行 http://www.jianshu.com/p/174fd2673897
iOS开发拓展篇—CoreLocation定位服务http://www.cnblogs.com/wendingding/p/3901230.html
iOS 7 SDK: 如何使用后台获取(Background Fetch) http://www.cocoachina.com/industry/20131114/7350.html

相关文章

  • iOS学习之APP后台运行

    最近在做一个后台监控流量的工具,需要APP进入后台后,仍然可以执行代码进行统计,但是iOS不像Android那样有...

  • iOS 后台刷新

    [TOC] iOS 后台刷新 首先大概介绍下iOS的APP运行状态简介和后台运行的一些基础知识 1. App运行状...

  • Paper Collection - Background Ta

    1.IOS后台运行机制详解(一)2.IOS后台运行机制详解(二)3.IOS后台运行 之 后台播放音乐4.转载:IO...

  • iOS 点击推送跳转详情页

    系统 API :iOS < 7、 7 <= iOS < 10、 iOS >= 10app 状态:后台运行、 前台...

  • iOS 后台持续定位

    前言 前文讲到程序推到后台的运行情况iOS 对APP推到后台运行时长的探究,主要还是想做个后台定位,希望APP在按...

  • iOS App 后台 Crash 调查

    Apple 一直在逐步放大 App 后台运行的权限,到今天为止,已知的 iOS App 后台运行场景有: Back...

  • iOS让App后台运行

    一般来说,如果不进行后台申请,在iOS系统上,当应用退到后台后,只有5s的时间去执行代码,之后将进入挂起状态。只有...

  • iOS 短信验证码倒计时按钮

    级别: ★★☆☆☆标签:「iOS 验证码后台倒计时」「NSTimer后台运行」「iOS 定时器后台运行」作者: ...

  • iOS后台模式借助位置更新实现

    需求:iOS系统下使我们的app在后台下(点击Home键进入后台)仍能继续运行任务. 阅读前提: 了解后台任务机制...

  • iOS 后台运行VoIP 类APP

    转载文章来自: http://www.cnblogs.com/jhzhu/p/3416305.html苹果官方原文...

网友评论

  • LoveY34:你这个后台运行是有时间限制的!过一段时间后app会被挂起(我尝试了后时间大概是4分钟左右),你想执行的代码都不会执行的!

本文标题:iOS学习之APP后台运行

本文链接:https://www.haomeiwen.com/subject/mvrarttx.html