美文网首页
ios 后台运行任务

ios 后台运行任务

作者: 寻靥 | 来源:发表于2018-09-18 09:32 被阅读0次

iOS系统的后台机制

我们都知道,苹果对APP占用硬件资源管的很严,更不要说应用后台时候的资源占用了。正常情况下,使用应用时,APP从硬盘加载到内存,开始工作;当用户按下home键,APP便被挂起,依然驻留在内存中,这种状态下,不调用苹果已开放的几种后台方法,程序便不会运行;如果在这个时候,使程序继续运行,则为后台状态;如果当前内存将要不够用时,系统会自动把之前挂起状态下的APP请出内存。所以我们看到,有些时候打开APP时,还是上次退出时的那个页面那些数据,有时则是重新从闪屏进入。

iOS系统后台机制大概可以分为5种状态

Not Running:APP没有启动,也没有后台运行。
Active:用户正在使用APP,比如说我们聊微信看网页的时候,APP就处于Active状态。
Inactive:这是一个过渡的状态,APP虽然打开了,但是用户没有跟APP有任何互动操作。
Background:APP在后台运行,微信会在没有打开的时候接收消息。
Suspended:APP虽然在后台运行,但是处于休眠状态,只占用一点内存。

那么我需要的是Background模式。即APP在后台运行同时保持程序active的状态

首先去xCode里面设置。到info.plist中添加以下信息:


image.png

然后到Capabilities里面打开后台模式,并根据项目的要求勾选对应的功能。


image.png

上代码
AppDelegate.m

@property (nonatomic, assign) UIBackgroundTaskIdentifier bgTask;
- (void)applicationDidEnterBackground:(UIApplication *)application {
    [self comeToBackgroundMode];
}
- (void)comeToBackgroundMode{
    UIApplication *app = [UIApplication sharedApplication];
    self.bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        [app endBackgroundTask:self.bgTask];
        self.bgTask = UIBackgroundTaskInvalid;
        exit(0);
    }];
}

这样申请后台时间只有180s,180s对我来说够用了,如果180s后用户没有回到前台,我会手动杀死app

相关文章

网友评论

      本文标题:ios 后台运行任务

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