iOS开发之无限后台

Swift实现(在AppDelegate对应的方法中添加如下代码)

funcapplicationDidEnterBackground(application:UIApplication) {

    //创建一个定时器

    timer=NSTimer.scheduledTimerWithTimeInterval(1.0, target:self,  selector:Selector("logAgain:"), userInfo:nil, repeats:true)

    //添加到主runloop中

    NSRunLoop.mainRunLoop().addTimer(timer!, forMode:NSDefaultRunLoopMode)

    letapp =UIApplication.sharedApplication()

    //如果后台任务关闭,就从新开启

    varbgTask:UIBackgroundTaskIdentifier? =UIBackgroundTaskInvalid

    bgTask = app.beginBackgroundTaskWithExpirationHandler{ () ->Voidin

    dispatch_async(dispatch_get_main_queue(), { () ->Voidin

        ifbgTask !=UIBackgroundTaskInvalid{

        bgTask =UIBackgroundTaskInvalid

          }

    })

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { () ->Voidin

ifbgTask !=UIBackgroundTaskInvalid{

bgTask =UIBackgroundTaskInvalid

}

})

}

}

//进入前台,关闭timer

funcapplicationWillEnterForeground(application:UIApplication) {

    iftimer!=nil{

    timer?.invalidate()

    timer=nil

    }

}

//timer的执行函数

funclogAgain(timer:NSTimer){

print("hello world")

}


OC实现(在AppDelegate对应的方法中添加如下代码)

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

    self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self       selector:@selector(logAgain:) userInfo:nil repeats:YES];

    [[NSRunLoop mainRunLoop] addTimer:_timer forMode:NSDefaultRunLoopMode];

    UIApplication* app = [UIApplication sharedApplication];

    self.bgTask = UIBackgroundTaskInvalid;

    __weak __typeof (&*self)weakSelf = self;

    self.bgTask = [app beginBackgroundTaskWithExpirationHandler:^{

    dispatch_async(dispatch_get_main_queue(), ^{

         if (weakSelf.bgTask != UIBackgroundTaskInvalid) {

                weakSelf.bgTask = UIBackgroundTaskInvalid;

         }

    });

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

             if (weakSelf.bgTask != UIBackgroundTaskInvalid) {

                     weakSelf.bgTask = UIBackgroundTaskInvalid;

             }

      });

}];

}

- (void)logAgain:(NSTimer*)timer{

//无限后台

}

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

           if (self.timer != nil) {

                   [self.timer invalidate];

                   self.timer = nil;

           }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容