美文网首页iOSiOS DeveloperiOS 开发
如何在后台跑NSTimer,永不停歇

如何在后台跑NSTimer,永不停歇

作者: 孙公瑾i | 来源:发表于2016-08-24 17:35 被阅读1418次

- (void)viewDidLoad {

             [super viewDidLoad];

           //保证timer在后台运行

           [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];

         //创建并执行新的线程

          NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(newThread) object:nil];

}

 //开一个新线程

- (void)newThread

    {

               @autoreleasepool

    {

//在当前Run Loop中添加timer,模式是默认的NSDefaultRunLoopMode

               [NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(timer_callback) userInfo:nil repeats:YES];

               //开始执行新线程的Run Loop

            [[NSRunLoop currentRunLoop] run];

     }

}

//定时器

- (void)timer_callback

{

                NSLog(@"根本停不下来");

}

下面上图

相关文章

  • 如何在后台跑NSTimer,永不停歇

    - (void)viewDidLoad { [super viewDidLoad]; //保...

  • NStimer 后台运行

    使用NSTimer的时候,每当APP进入后台,或者屏幕休眠后,NSTimer就会暂停。 要在后台NSTimer也运...

  • 永不停歇,在路上

    永不停歇,在路上 ——参观安阳市第五次名师讲座培训心得 隆冬相约,踏进安阳市紫薇小学,今天一行七人,又一次坐在紫薇...

  • 学习

    永不停歇

  • NStimer 后台挂起

    iOS为了让设备尽量省电,减少不必要的开销,保持系统流畅,因而对后台机制采用墓碑式的“假后台”。除了系统官方极少数...

  • 永不停歇

    总是感觉时间的齿轮一直在转动,没有因为我们个人而停下来过,只会越转越快,等到有一天你快不过它了,只能被它碾压的粉身...

  • 《永不停歇》

    “我想让自己的思想状态维持在一种相对稳定的状态,既不激进,也不停滞。” “这个社会的戾气太重了,人们的急功近利之心...

  • 永不停歇

    天空的颜色明媚耀眼 我习惯了去记录这样平凡却美好的瞬间 虽不至于多快乐 却欣喜于自然的奇幻 每每都感觉到不可思议 ...

  • 永不停歇

    这里的日子并不好过, 这与别人无关, 也不愿意责怪自己, 当然, 做梦的自己需要彻底改变, 哈, 快乐起来吧! 有...

  • 永不停歇

    信息试错机的路,永远没有尽头 自从远古时代第一个RNA分子开始自我复制开始,信息试错机就踏上了它们的征程。信息控制...

网友评论

  • 英俊神武:[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];
    这行代码不要,也能在后台运行啊
  • 白牛桑:审核没有问题吗,这样?
  • 编辑时简书为什把所有都在列表里:在后台的时候内存是不是一直在增长
  • ShenYj:纯使用蓝牙的后台模式,测试保持了22个小时,是目前我的最长记录,不知道此方式是否有增益?
    naiyi:@ShenYj 你好,你的程序在后台状态下,断开连接以后重连的逻辑是直接用缓存的上次连接的peripheral对象做connect操作,还是scan到peripheral再做connect操作?据我观察,scan操作有一定的概率会无响应(前后台scan的时候都会发生,但前台无响应的时候随便做一下app状态切换,比如调出上下滑就能恢复正常响应,很奇怪),从而导致后续的操作都停滞。在前台的时候scan可以通过设置一个定时器做看门狗来规律性重启扫描解决。但后台时定时器会因为挂起失去执行权限,所以碰到scan无响应的情况就一直卡在那里了(backgroundTask也没用,expiration必须用户切换到一次前台才会被重置为180秒)。另外,第一种情况直接connect缓存的peripheral对象在我做过的测试里都能重连上,只是有时候连的比较慢。
    ShenYj:@naiyi 多谢回复, 另外想问下, 您做过蓝牙相关开发对么,我刚开始接触蓝牙, 22小时已经是我目前测试的最长时间了,而且手机和设备是一直在有效连接范围内没动过的,断开后后台十分钟~十五分钟内都没能重连上, 而如果我短时间的因为距离让两者断开,比如去个洗手间回来,在后台能重新连接上, 希望得到您的答复.
    naiyi:不但不会永久执行,而且因为没有对应的endTask,expiration之后还会被system kill process。估计作者只是在debug模式下跑了测试,挂调试器的进程会一直停留在后台执行模式而不会被挂起,跟用不用backgroundTask没关系。蓝牙保活可以永久的,只要蓝牙不断,规律性的notify让CoreBluetooth唤醒app。
  • 55de0856f7a4:是永久运行吗?不是说最多10分钟么?望大神赐教
    孙公瑾i:debug下跑了8个多小时
  • 棍武中原:来认识下ios程序员
    孙公瑾i:@棍武中原 :smirk:

本文标题:如何在后台跑NSTimer,永不停歇

本文链接:https://www.haomeiwen.com/subject/vpdosttx.html