应用在后台时短信倒计时继续运行

来源:互联网 发布:美国最高法院知乎 编辑:程序博客网 时间:2024/06/11 06:13


把应用放置后台,短信验证码的倒计时继续运行的方法



button的点击事件里写{

[sender startTimer];//倒计时开始

}


- (void)startTimer

{

    __blockint timeout = Timeout;//倒计时时间

    dispatch_queue_t queue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

    dispatch_source_t _timer =dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER,0,0,queue);

    dispatch_source_set_timer(_timer,dispatch_walltime(NULL,0),1.0*NSEC_PER_SEC,0);//每秒执行

    

    

    dispatch_source_set_event_handler(_timer, ^{

        if(timeout<=0){//倒计时结束,关闭

            dispatch_source_cancel(_timer);

            dispatch_async(dispatch_get_main_queue(), ^{

                //设置界面的按钮显示根据自己需求设置

                [selfsetTitle:@"发送验证码"forState:UIControlStateNormal];

                [selfsetTitleColor:[RGBColorcolorWithHexString:@"282828"]forState:(UIControlStateNormal)];

                self.layer.borderColor = [RGBColorcolorWithHexString:@"52a6f1"].CGColor;

                self.userInteractionEnabled =YES;

            });

        }

        

        else{

            //            int minutes = timeout / 60;

            int seconds = timeout %1000;

            

            NSString *strTime = [NSStringstringWithFormat:@"%.2d", seconds];

            dispatch_async(dispatch_get_main_queue(), ^{

                //设置界面的按钮显示根据自己需求设置

                NSLog(@"____%@",strTime);

                [selfsetTitle:[NSStringstringWithFormat:@"%@S",strTime]forState:UIControlStateNormal];

                [selfsetTitleColor:[RGBColorcolorWithHexString:@"999999"]forState:(UIControlStateNormal)];

                self.layer.borderColor = [RGBColorcolorWithHexString:@"999999"].CGColor;

                self.userInteractionEnabled =NO;

            });

            timeout--;

        }

    });

    dispatch_resume(_timer);

    

}



AppDelegate.m的这个方法里面加入如下代码,如果不写的话,倒计时在应用放置后台时就会停止,


- (void)applicationDidEnterBackground:(UIApplication *)application {

    

 

    UIApplication*   app = [UIApplicationsharedApplication];

    __block   UIBackgroundTaskIdentifier bgTask;

    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{

        dispatch_async(dispatch_get_main_queue(), ^{

            if (bgTask !=UIBackgroundTaskInvalid)

            {

                bgTask = UIBackgroundTaskInvalid;

            }

        });

    }];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{

        dispatch_async(dispatch_get_main_queue(), ^{

            if (bgTask !=UIBackgroundTaskInvalid)

            {

                bgTask = UIBackgroundTaskInvalid;

            }

        });

    });

    

}


应用进入后台时,短信倒计时仍然继续



原创粉丝点击