• (原)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。

      



     

  • 相关阅读:
    30个热门的CSS3 Image Hover 脚本
    70个jQuery触摸事件插件 支持手势触摸!
    40个超酷的jQuery动画教程
    45个漂亮且有创意的HTML5网站展示
    40+极具创意的产品展示PSD模板
    25个开始学习HTMLE5的最好的资源
    25个很酷的jQuery倒计时脚本–添加动态计数器!
    45个wordpress自适应插件
    30+WordPress古典风格的主题古典却不失时尚
    为kindeditor上传图片添加水印(PHP版)
  • 原文地址:https://www.cnblogs.com/xiaouisme/p/2518178.html
Copyright © 2020-2023  润新知