@
wanguorui123 不是 Swap 不耗电,只是凡事都需要对比,哪种方案更耗电。
如果内存不足以维持前台应用正常运行,那么其实已经完全没法用了,就像当年 iPhone 6 玩王者荣耀结算界面闪退,iPhone 8 玩原神玩一半闪退( 1.0 版本还不给玩,1.1 给了)
这是更糟糕的用户体验……
这时候如果有 Swap 可以用,至少能维持应用正常运行。
如果只是用来存储后台应用,那么,内存不足的场景下(充足的时候就没有区别了),如果有 Swap ,应用的内存会存储到 SSD 里,如果没有,应用就会被杀掉。
有 Swap 的时候,当你切换回这个应用,系统只需要从硬盘里读取数据到内存中,然后一切状态都恢复了。程序本身不需要做任何初始化工作,约等于给所有应用都适配了状态恢复。
如果没有 Swap ,考虑当下现实情况,比如你切换到微信,却发现还需要看地球。
这时候应用还要额外做初始化工作,加载本地存储的持久化数据,创建各种对象,生成界面元素等等。此过程不但需要从硬盘读取数据,还需要做不少计算。完毕之后,用户还要操作 APP ,点开之前使用的界面。
耗电只会比有 Swap 的情况更多。
还有,你所谓的后台恢复机制,实际上也许和你想象中有出入。如果你想象中就像 Swap 那种样子,应用的内存全部保存起来,下次打开就会读取,那它还真不是这样。
iOS 6 之前没有这个东西,不过有墓碑机制。iOS 6 之后有个 UI 状态读取和恢复的 API ,但是其他应用数据都要自己保存。
后来苹果还改过这套 API 。后面我不做 iOS 开发了,不太熟悉……
其实并不是那种“整个 APP 数据完整保存下来”的机制。
只不过它可以缩短初始化的流程,能用之前的数据直接去创建应用界面和各种对象,还能让用户省去打开之前使用的界面的操作。让用户感觉“一点开应用就接着上次没看完,没用完的地方继续操作”,就像现在的 VSCode 、JetBrains IDE 那样。
最后,在 Android 上开启和关闭这玩意很简单,虽然代码实现不太一样,但是目的基本一样。我并没有发现它会造成可感知的续航缩短。比如开启之前我能用一天半,开了之后只能勉强用一天。实际上没这个现象。