步骤:

1.在info.plist里加入UIBackgroundModes键,其值为数组,数组之一为voip字符串:

<key>UIBackgroundModes</key><array><string>voip</string></array>

2.在程序启动的时候调用- (void)setupBackgroundHandler函数,函数体如下:

#pragma mark - VoIP
 
- (void)setupBackgroundHandler
{   
    if( UIUDeviceIsBackgroundSupported() )
  
        if(
           [[UIApplication sharedApplication] setKeepAliveTimeout:600 handler: ^
            {
                [self requestServerHowManyUnreadMessages];
            }
            ]
           )
        {
            UDLog(@"Set Background handler successed!");
        }
        else
        {//failed
            UDLog(@"Set Background handler failed!");
        }
    }
    else
    {
        UDLog(@"This Deviece is not Background supported.");
    }
}
 
- (void)requestServerHowManyUnreadMessages
{
    UIApplication* app = [UIApplication sharedApplication];
     
    if([app applicationState] == UIApplicationStateBackground)
    {
        NSArray * oldNotifications = [app scheduledLocalNotifications];
        if ([oldNotifications count] > 0)
            [app cancelAllLocalNotifications];
        UILocalNotification* alarm = [[[UILocalNotification alloc] init] autorelease];
        if (alarm)
        {
            alarm.fireDate = [NSDate dateWithTimeIntervalSinceNow:15];
            alarm.timeZone = [NSTimeZone defaultTimeZone];
            alarm.repeatInterval = 0;
            alarm.soundName = UILocalNotificationDefaultSoundName;
            alarm.alertBody = @"Time to request MOA2 Server!";
            [app scheduleLocalNotification:alarm];
        }
    }
    else if([app applicationState] == UIApplicationStateActive)
    {
        UIAlertView *alertView =  [[[UIAlertView alloc] init] autorelease];
        [alertView setTitle:@"alert"];
        [alertView setMessage:@"Time to request MOA2 Server!"];
        [alertView addButtonWithTitle:NSLocalizedString(@"cancel", nil)];
        [alertView setDelegate:nil];
        [alertView show];
    }
}

解说:

- (BOOL)setKeepAliveTimeout:(NSTimeInterval)timeout handler:(void (^)(void))keepAliveHandler

函数功能:app每隔timeout唤醒一次。

0.要成功调用该函数,就必须在Info.plist里设UIBackgroundModes键的array值之一voip字符串.

1.timeout必须>=600

2.唤醒app的时间间隔是不精准的。

3.唤醒后只有10秒执行时间。即handler里的代码要在10秒类执行完。10秒后app再次被阻塞。

(可以用-backgroundTimeRemaining属性来返回剩余时间)

4.该函数成功调用后,在程序生命周期内有效。

该函数的效果在回到前台的状况下,依然有效。(因此可以把它当timer使.)

5.clearKeepAliveTimeout函数用来清除handler。

IOS在后台每隔一段时间执行一下的更多相关文章

  1. C#实现每隔一段时间执行代码(多线程)

    总结以下三种方法,实现c#每隔一段时间执行代码: 方法一:调用线程执行方法,在方法中实现死循环,每个循环Sleep设定时间: 方法二:使用System.Timers.Timer类: 方法三:使用Sys ...

  2. delphi中我用定时器每隔一段时间执行操作

    delphi中,我用定时器每隔一段时间执行数据库插入及更新工作!adoquery.close;adoquery.sql.cleare;adoquery.connection:=con1;adoquer ...

  3. 【C#-多线程】实现每隔一段时间执行代码(多线程) 3种定时器

    总结以下三种方法,实现c#每隔一段时间执行代码: 方法一:调用线程执行方法,在方法中实现死循环,每个循环Sleep设定时间: 方法二:使用System.Timers.Timer类: 方法三:使用Sys ...

  4. 每隔一段时间执行一次函数。window.setTimeout

    timer2 = window.setTimeout("showTaxi()", 30000);//30秒从后台获取一次数据,显示在地图上. 原来试过  setInterval . ...

  5. 如何在JAVA中每隔一段时间执行一段程序

    可以用线程来做,每隔几秒开一个线程代码如下 public void runTask() { final long timeInterval = 120000;// 两分钟运行一次 final Thre ...

  6. js每隔一段时间执行函数

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. js setInterval每隔一段时间执行一次

    js setInterval每隔一段时间执行一次setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式.setInterval() 方法会不停地调用函数,直到 clearI ...

  8. 隔一段时间应用就会挂掉(进程在,但停止响应,也无log输出),必须重启tomcat

    此处是转载的  是给自己做的备注 问题:隔一段时间应用就会挂掉(进程在,但停止响应,也无log输出),必须重启tomcat 原因查找:由于tomcat自身log中并无错误产生,磁盘空间足够,读写也正常 ...

  9. flask中使用ajax 处理前端请求,每隔一段时间请求不通的接口,结果展示同一页面

    需求: flask中使用ajax 处理前端请求,每隔一段时间请求不通的接口,结果展示同一页面 用到 setTimeout方法,setTimeout(function(){},1000):setTime ...

随机推荐

  1. TCPDUMP Command Examples

    tcpdump command is also called as packet analyzer. tcpdump command will work on most flavors of unix ...

  2. 测试浏览器最多能包含Cookie的个数和Cookie中包含的最多内容

    public class CookieTestServlet extends HttpServlet { public void doGet(HttpServletRequest request, H ...

  3. Android5.0之Activity的转场动画

    Activity的转场动画很早就有,但是太过于单调,样式也不好看,于是Google在Android5.0之后,又推出的新的转场动画,效果还是非常炫的,今天我们一起来看一下. 1.旧转场动画回顾 首先我 ...

  4. AWS IAM (Identity and Access Management) 使用笔记

    为 AWS 管理控制台登录页面 URL 创建别名 $ aws iam create-account-alias --account-alias <value> 创建用户 $ aws iam ...

  5. oledb方式读取excel文件

    进入博客园后台发现12年11月份写的草稿没发,时隔1年,把它拉出来晒晒太阳. 前言 第一次做Excel文件导入,采用了oledb,不足之处,还请各位大牛指出,谨以此文对导入Excel做个总结. 一般步 ...

  6. 一个月的时间--java从一无所有到能用框架做点东西出来

    四月20号到六月2号 因为顺利完成了Struts在线考试系统的学习,基本掌握了struts框架的原理和他众多复杂的标签.趁着下一件事情还没到时间,也顾不上写昨天研习的student部分和今天stude ...

  7. Nginx 简单的负载均衡配置示例

    http://www.cnblogs.com/xiaogangqq123/archive/2011/03/02/1969006.html 在此记录下Nginx服务器nginx.conf的配置文件说明, ...

  8. 学习笔记_Java_day13_JSTL_自定义标签库(9)

    自定义标签 1 自定义标签概述 1.1 自定义标签的步骤 其实我们在JSP页面中使用标签就等于调用某个对象的某个方法一样,例如:<c:if test=””>,这就是在调用对象的方法一样.自 ...

  9. cordova 创建ios项目

    cordova create fmscmsios1023 com.weilian.fmscms fmscms cd fmscms cd fmscmsios1023/ cordova platforms ...

  10. javascript BOM对象 第15节

    <html> <head> <title>浏览器对象</title> <script type="text/javascript&quo ...