iOS 如何让一个程序在后台运行不被挂起,不死掉

本文介绍了一种使iOS应用在后台无限期运行的方法,通过在AppDelegate中使用后台任务并在即将超时时重新创建任务来实现。这种方法可以让应用绕过苹果600秒的后台限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

iOS 如何让一个程序在后台运行不被挂起,不死掉

**前言:**这是本人的第一篇博客,本来对这种写博客这种东西无感,但是发现有些东西如果不晒在网上,会让很多人费很多的时间去找一种问题的解决方法,于是我决定不做一个伸手党。

支持原创,转载就注明出处。

  • 苹果后台运行的原理
  • 如何解决
  • 代码实现

苹果后台运行的原理

大家都知道,当一个程序进入后台时,除了一些特定的操作比如用户的音频,定位等能够在info.plist里修改设置进行后台操作以外,其他的很难能够进行获取,比如下载一个东西,就比如我们知道的某视频播放器(这里为了排除广告嫌疑,不进行提名)也不能完成后台挂起状态的缓存,我个人觉得这点优化的不是很好。有的人应该知道苹果哪怕后台挂起一个东西,在appdelegate 里进入后台执行的方法,也只能存活600s。
进入后台执行的代理方法是

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

我们可以在这个代理方法里进行一些后台执行的操作,但是只有600s 的存活时间。

如何解决

假如在appdelegate的代理方法里开启一个后台任务

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    //开启一个后台任务
    taskId = [application beginBackgroundTaskWithExpirationHandler:^{
        
       
    }];  
}
//下面是声明的任务ID
UIBackgroundTaskIdentifier taskId;

在任务结束的时候会回调block,所以也就是说600s 以后会回调。我们需要做的就是在程序还未进行到600s 还未死掉的时候进行一个结束程序,新建一个后台程序的操作,这样以来程序就能无止境的在后台进行运行,你可以做一系列的操作。下面废话不多说,我把写的一个Demo的例子粘在下面,请大家参考,有不懂得可以提问。

//进入后台模式的代理

UIBackgroundTaskIdentifier taskId;

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    //开启一个后台任务
    taskId = [application beginBackgroundTaskWithExpirationHandler:^{
        
        //结束指定的任务
        [application endBackgroundTask:taskId];
    }];
    
    [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerAction:) userInfo:nil repeats:YES];    
}

//定时器的方法

- (void)timerAction:(NSTimer *)timer {
    count++;
    
    if (count % 500 == 0) {
        UIApplication *application = [UIApplication sharedApplication];
        //结束旧的后台任务
        [application endBackgroundTask:taskId];
        
        //开启一个新的后台
        taskId = [application beginBackgroundTaskWithExpirationHandler:NULL];
    }
    
    NSLog(@"%d",count);
}

其实很简单,这个demo就是给一个定时器让它一直打印,如果不来回关闭任务创建任务程序会在600s 以后死掉,但是做此操作之后程序就会一直在后台执行。
PS:写在Appdelegate里面不要忘了给self.window 一个rootViewController.

希望可以帮到需要的人,第一次写博客,有什么不足的地方希望大家及时指出,也希望大家多多支持。
分享牛,分享、我们是快乐的。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值