zoukankan      html  css  js  c++  java
  • IOS7 Background Fetch后台应用程序刷新

    上篇文章<IOS后台运行浅析>简要说明了在IOS平台执行后台任务需要注意的问题,今天特酷吧主要说下IOS7新增加的后台特性Background Fetch。Background Fetch主要用户需要定期更新数据的app,比如及时通信类,微博等app。IOS7用户可以在 设置->通用->后台应用程序刷新 来开关此功能。
    关于Background Fetch的更多请参考:<IOS 7四种后台机制> 中关于Background Fetch的解释,这里只说明怎么使用Background Fetch。
    一,开启Background Fetch支持
    在XCode->TARGETS->Capabilities->Background Modes打开并添加Background Fetch.
    同时在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中添加:
    [[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
    MinimumBackgroundFetchInterval参数值是两次Fetch时间间隔,不能保证每隔这个时间间隔都会调用。这里设置为UIApplicationBackgroundFetchIntervalMinimum,意思是尽可能频繁的调用我们的Fetch方法。
    二,增加实现Fetch方法
    - (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{};
    每次系统Fetch时都会调用该方法,我们可以在该方法中做刷新数据等操作,操作执行完成以后要调用completionHandlerblock(),比如:completionHandler(UIBackgroundFetchResultNewData);文档中说系统会根据completionHandler(执行的时间)来估计此次Fetch的耗电等。如果耗时耗电比较多,可能会降低被调用的次数。但这个方法也不是不限时执行的,说是有30s的时间来执行操作。completionHandler有三个参数:
    UIBackgroundFetchResultNewData 成功拉取数据
    UIBackgroundFetchResultNoData 没有新数据
    UIBackgroundFetchResultFailed 拉取数据失败或者超时
    三,模拟Fetch事件
    在实际的IOS7环境中,Fetch事件是由系统管理的,app开发者无法预先知道Fetch事件达到的时机。但XCode也提供了Fetch事件的调试办法,在XCode上运行程序后,在Debug->Simulate Background Fetch.
    还有一种情况是app没有运行(不在前台也不在后台),被Fetch事件唤醒执行.这种情况的测试方法如下:
    Product->Scheme->Edit scheme 在Debug模式选中Options,点选Launch due to a background fetch event,运行即可。
    [特酷吧]可以观察到当Fetch事件到来时,app先进入后台,再执行- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{}。
    四,判断设备是否开启后台应用程序刷新功能

    折叠C/C++ Code复制内容到剪贴板
    1. if ([[UIApplication sharedApplication] backgroundRefreshStatus] != UIBackgroundRefreshStatusAvailable)  
    2.             {  
    3.                 UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:@"您没有开启后台刷新,请在 设置->通用->应用程序后台刷新 中开启." delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];  
    4.                 [alertView show];  
    5.                 [alertView release];  
    6.             }  


    转载请注明来自特酷吧,本文地址:http://www.tekuba.net/program/320/
    参考阅读:
    IOS后台运行浅析 IOS 7四种后台机制
    IOS 屏幕旋转控制详解  IOS 本地和远程推送通知详解
    Communicating with Other App程序间通信  IOS应用启动流程生命周期详解

  • 相关阅读:
    JS基础_函数的简介
    frp 使用入门
    树莓派开启smb
    python 反射调用
    VIDEOIO ERROR: V4L: can't open camera by index 0 for raspberryPi
    face_recognition 人脸识别报错
    安装FFMpeg CentOS 7
    Centos 7 smb 安装使用
    ImportError: libQtTest.so.4: cannot open shared
    Raspberry Pi 3b+ 配置摄像头
  • 原文地址:https://www.cnblogs.com/lvyinbentengzhe/p/4168766.html
Copyright © 2011-2022 走看看