zoukankan      html  css  js  c++  java
  • IOS在后台每隔一段时间执行一下

    步骤:

    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。

  • 相关阅读:
    线性回归和 逻辑回归 的思考(参考斯坦福 吴恩达的课程)
    数据结构算法基础-内部排序算法
    机器学习《test》
    day1.接口测试(概念、Postman、SoapUI、jmeter)
    SQL2000 3核6核 CUP 安装SP4
    SQL常用语句
    SQL SERVER 2000数据库置疑处理
    常用终端命令
    c++ 位操作
    计算机为什么用补码存储数据?
  • 原文地址:https://www.cnblogs.com/wudan7/p/3967909.html
Copyright © 2011-2022 走看看