iOS为何关闭后台会更费电 iOS如何保持后台APP和游戏一直运行

2020-03-09 11:23:31苹果教程媛媛

iOS后台需要关闭吗?iOS后台APP在哪?iOS如何保持后台一直运行?iOS如何保持后台游戏运行防止掉数据?手机重度用户使用iPhone时,总会下意识关闭后台应用,觉得能让电池使用更久。苹果工程师却警告:不用关闭后台!这是为什么?下面来看看iOS伪后台机制和保持后台APP一直运行的教程。

iOS为何不能关闭后台

近日根据苹果软件工程部门的高级副总裁费德里奇表示,关闭后台中的应用并不能释放运行内存,而且还会对性能造成影响,以及耗费电量。

在日常使用手机的时候,很多人都喜欢把系统后台运行的APP 清理掉(清理后台)。一部分用户清理后台 APP 是因为强迫症,看着多任务有APP 在运行就不爽。而有部分用户则认为,APP 在后台持续运行,会占用系统资源,让手机更耗电。对于这种说法,苹果表示十分不赞同:清理后台反而会消耗更多资源,让手机耗电更快。

iOS后台工作机制一览:

iOS后台APP有五种状态

看到这,相信很多人都懵逼了。APP 在后台持续运行,不是更耗电吗,之前用安卓手机就是这样的。

的确,由于内存管理机制的问题,安卓系统下,后台运行 APP 会占用一定的资源,加快电量流失。但iOS 的后台机制则不一样,对后台 APP 的管控十分严格。iOS系统中,App的状态可以分为5个,分别是Not Running、Active、Inactive、Background和Suspended。

第一个状态Not Running:App没有启动,也没有后台运行

第二个状态Active:用户正在使用App,比如说我们聊微信看网页的时候,App就处于Active状态。

第三个状态Inactive:这是一个过渡的状态,App虽然打开了,但是用户没有跟App有任何互动操作。

第四个状态Background:App在后台运行,微信会在没有打开的时候接收消息。

第五个状态Suspended:App虽然在后台运行,但是处于休眠状态,只占用一点内存。

在苹果的iOS 系统中,有专属的资源调配及省电的功能,系统会在必要时,将一些最后使用时间较远的软件,所占用的资源调配到你正要执行的操作(APP)上。也会让一些闲置了一段时间的 APP 进入休眠,腾出更多 RAM、减少耗电量。而整个过程都是自动的,不需要额外将软件关闭。

假设用户习惯性地将用完的 APP 彻底关闭后台,那么下一次启动就需要载入软件,而重新载入的过程会消耗更多资源,因此功耗也会相对提高。

简单来说,后台自动清理是让 App 处于浅睡眠状态,它会随时做好苏醒的准备;手动清理是直接把 App 给催眠了,重新唤醒它就要“又踢又拽”的,而这个“又踢又拽”的过程则需要动用到手机中的所有资源,只是我们观察不出来罢了。

正在使用 iPhone 的你,还是改掉清理后台的习惯吧,iOS 是不需要清理后台的,而这也是 iPhone 让人省心的其中一点。

iOS什么时候需要清理后台

不用关闭,因为操作系统会停止在后台占用资源的所有 App 的。唯一需要关闭它们的时候,是程序运行异常、需要重新启动的时候。

其实对于iPhone手机来说,经过这么多年的发展已经非常成熟了。并且iOS系统对应用的权限是非常严格的,即便是在后台也不会时刻莫名被唤醒。而且苹果官方也有说明:“你最近使用的 App,这些应用其实没有打开,他们只是处于待命模式,帮助你管理程序和多线程操作。”

所以,当你在iPhone上用完APP后,留在后台即可不用时刻去关闭。而且,如果你随时关闭,频繁杀后台,则会导致当应用重新打开时经历新一轮的“热启动”,不仅会延长启动时间,还会占用额外的内存,从而提高电池损耗并让设备变得更慢。

iOS“伪后台”机制作用

因为iPhone的后台是伪后台,所以在后台运行的时候,相当于已经关闭了程序,再次打开时候的界面和刚退出的时候是一样的,严格意义来说,苹果其实没有后台,所以不能保持后台运行不退出。

ios系统是假后台,假后台是说,让后台程序不使用cpu。将要后台的程序的数据记录下来,然后关闭,当重新打开时候,会将后台之前的记录调出来,恢复,这样就会在后台是不占用cpu,加快系统流畅性。

iPhone如何保持后台APP不关闭

1、在系统设置的下面,找到并打开应用程序管理。

2、打开应用程序管理,点击选项卡切换为正在运行,查看有哪应用在运行;

3、点击需要关闭的进程操作,如图所示。

4、点击进入需要关闭的应用进程,点击下面的停止,手动强制停止应用运行。

5、没有被选择保护的应用,则会在锁屏的时候自动关闭,强制停止退出。

iPhone如何保持后台游戏运行

苹果手机的后台运行是伪后台,为了使系统更加省电流畅,一般系统会储存应用数据然后在你打开后台应用时会还原应用,但期间应用其实是冻结的,所以挂游戏就会断线。

1、首先你要确保ios版本是最新的,之前的版本都假的后台设置

2、打开桌面设置

3、找到通用并打开

4、点击选中后台应用刷新(后台刷新就是自动激活应用可保持应用联网)

5、之后只要游戏在后台不去主动关闭它就可以了,但要注意不要后台太多应用,因为会消耗大量流量和电量影响手机使用

6、下图是官方对后台应用刷新的解释

iPhone如何保持后台APP一直运行

iPhone如何需要的是Background模式,即APP在后台运行同时保持程序active的状态 。怎么办?

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

然后到Capabilities里面打开后台模式,并根据项目的要求勾选对应的功能。我这里只需要保持后台运行并且播放背景音乐及通知功能。所以就勾选了第一个和最后一个

以上这两步是告诉系统我这个APP支持后台模式,对应的环境为音频环境。

可是到这一步,APP还是不能长时间运行到后台。

为什么?我们思考一下。我们让程序支持了后台运行的模式。那么我们是不是还需要系统知道我们的程序要在后台运行多久呢?我们需要告诉系统我们期望APP在后台存活的时间。

首先声明一个属性

 @property (nonatomic, assign) UIBackgroundTaskIdentifier bgTask;

在进入后台的时候通过AppDelegate里面的方法:

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

  [ self comeToBackgroundMode];

}

 

-(void)comeToBackgroundMode{

    //初始化一个后台任务BackgroundTask,这个后台任务的作用就是告诉系统当前app在后台有任务处理,需要时间

    UIApplication*  app = [UIApplication sharedApplication];

    self.bgTask = [app beginBackgroundTaskWithExpirationHandler:^{

    [app endBackgroundTask:self.bgTask];

    self.bgTask = UIBackgroundTaskInvalid;

    }];

    //开启定时器 不断向系统请求后台任务执行的时间

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

    [self.timer fire];

}

 

-(void)applyForMoreTime {

   //如果系统给的剩余时间小于60秒 就终止当前的后台任务,再重新初始化一个后台任务,重新让系统分配时间,这样一直循环下去,保持APP在后台一直处于active状态。

    if ([UIApplication sharedApplication].backgroundTimeRemaining < 60) {

    [[UIApplication sharedApplication] endBackgroundTask:self.bgTask];

    self.bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{

        [[UIApplication sharedApplication] endBackgroundTask:self.bgTask];

        self.bgTask = UIBackgroundTaskInvalid;

    }];

    }

}

现在就可以让我们的APP一直运行在后台啦!总结下来的思路就是:通过一个后台任务(这个任务我们也不用管,它存在的意义就是和系统去请求后台运行的一定的时间),这个时间我们不知道也不用去管,我们可以通过该时间还剩下多少判断是否继续请求时间,如此循环,我们就可以不断的请求时间来保持我们的app一直运行在后台。

接下来解决音乐在后台模式(切换到后台或者锁屏状态)下停止播放的问题。

其实很简单。

//设置后台模式和锁屏模式下依然能够播放

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil];

[[AVAudioSession sharedInstance] setActive: YES error: nil];

 

//初始化播放器和两个音频(一个有声 一个无声)

NSURL *urlSound = [[NSURL alloc]initWithString:[[NSBundle mainBundle]pathForResource:@"pomodoSound" ofType:@"m4a"]];

playerSound = [[AVAudioPlayer alloc] initWithContentsOfURL:urlSound error:&playerError];

NSURL *urlNoSound = [[NSURL alloc]initWithString:[[NSBundle mainBundle]pathForResource:@"backSound" ofType:@"mp3"]];

playerNoSound = [[AVAudioPlayer alloc] initWithContentsOfURL:urlNoSound error:&playerError];

 

playerSound.numberOfLoops = -1;

playerNoSound.numberOfLoops = -1;

 

player = playerSound;

[player play];

下面解释一下AVAudioSession的一些设置参数

1、NSString *const AVAudioSessionCategoryAmbient;

静音模式或者锁屏下不再播放音乐,和其他app声音混合。

2、NSString *const AVAudioSessionCategorySoloAmbient;

默认模式,静音模式或者锁屏下不再播放音乐,不和其他app声音混合。

3、NSString *const AVAudioSessionCategoryPlayback;

表示对于用户切换静音模式或者锁屏 都不理睬,继续播放音乐。并且不播放来自其他app的音乐

4、NSString *const AVAudioSessionCategoryRecord;

不播放音乐,锁屏状态继续录音

5、NSString *const AVAudioSessionCategoryPlayAndRecord;

播放音乐,并录音

iPhone11后台在哪

1、解锁手机之后,进入手机待机页面。

2、手指轻轻向上滑动并按住屏幕。

3、接下来就调出来多任务管理了,我们可以进行“查看正在运行的后台程序、切换app、关闭后台运行程序”等相关操作。将所需关闭的软件往上划就可以关闭后台了。

以上就是iOS不能关闭后台APP的原因,以及iOS保持后台APP、游戏一直运行的图文教程。iOS后台和安卓后台的运行机制不同,iOS的后台是伪后台,它只有存储数据,在应用再次打开时还原数据的作用。iOS后台有5种状态。如果清理iOS后台,那么再次调入APP需要耗费更多的资源,这样费电也损害性能。关注教程之家,解锁更多苹果教程。

相关教程
图文教程