手机用久了为什么会变慢
一、越来越多的后台程序
由于你的手机上装了越来越多的APP,有些APP在你关闭它以后仍还有一些后台服务程序在运行。这些后台程序会消耗你大量的CPU和RAM(运行内存)资源,导致你的手机变得越来越慢。
二、操作系统和APP更新
随着手机配置的不断升级,新的操作系统或者APP为了从最新和最强大的硬件中获益,它们的资源会变得越来越多,对硬件的要求也越来越高。因此,旧的智能手机和过时的硬件很难跟上步伐。
三、频繁的ROM(本地内存)使用 和 垃圾文件
ROM的频繁读写会使内存空间不连续,APP产生的垃圾文件也会加剧内存的碎片化,两者都会导致系统对内存读写时会增加了更多的寻道时间,导致系统变慢。
四、电池老化
随着电池的不断老化,电池的内阻也不断增加,电池也变得更加容易变热。由于CPU对温度很敏感,如果手机太热,手机的电源管理控制器可能会调慢处理器的速度,所以手机也会变慢。
如何解决手机慢的问题
- 卸载掉无用的APP,关闭无用的后台程序。
- 升级操作系统时需要谨慎,并只更新自己需要更新的APP。
- 清理无用的图片和视频,可使用垃圾清理软件清理垃圾文件。
- 更换电池(如果更换成本很高,自行考虑)。
安卓手机为什么用久了会比苹果手机慢
如上解释了智能手机变慢的通用的原因,那么为什么大家普遍反映安卓手机用久了会比苹果手机慢呢?我们从两个角度分析。
一、大众角度
- iOS系统比安卓手机系统好,更加流畅,所以用久了依然不会卡。
- App Store垃圾APP比较少,安卓应用市场审核宽松,垃圾APP多。
- 品牌机与组装机的区别。
以上3点讲的是苹果手机的优势,但是大家也慢慢发现,这两年来苹果手机的热度已经下降的很厉害,大家也越来越喜欢上安卓手机。
其中一个原因是相同的价格安卓手机的硬件完全碾压苹果手机,在硬件为王的时代,苹果手机高昂的价格已成为它的劣势。如下图:
而另外一个原因是随着安卓系统的不断更新,系统的流畅度也大大提高,具体优化在下面会讲到。
二、程序员角度
接下来我们以程序员的角度来分析下安卓手机为什么会比iOS手机卡,以及安卓操作系统做的一些比较大的优化。
- iOS系统对后台进程有严格限制。
什么是后台进程,一般来说当进程处于用户不可见状态下,进程就从前台切换到后台。后台进程会占用CPU和RAM,导致系统性能下降。
iOS系统后台进程管理策略:除了一些特殊的进程可以长驻于后台,一般的进程在后台只能存活不超过3分钟。特殊的进程包括:媒体播放,定位服务,网络电话,即时通讯类等进程。所以一般的后台进程都无法长期存活在后台。那么也就意味着在同一时间,iOS系统同时运行的进程都不会很多,所以苹果手机也不需要像安卓机一样需要8G甚至更大的内存。
安卓系统后台进程管理策略:
a.安卓8.0以前的系统
系统只有在内存不够的时候才杀进程,如果在内存足够的情况下,理论上所有的后台进程都可以长驻于RAM(运行内存)中不被删除。大量的后台进程将消耗CPU的计算能力,也会消耗RAM空间,使得你正在运行的前台进程变得异常卡顿。
那有可能你会想,为什么开发者不把代码优化的好点,不去开启那么多后台进程呢?
因为程序员的权力是非常有限的,产品说:“我们的APP在被用户关掉之后,依然需要收到我们的消息推送”。程序员就啃次啃次开发了一个后台通知进程服务。然后产品说:“我们的APP即使在运行内存不足的情况下,系统也不能把我们的后台进程杀掉,用户依然能收到我们的消息推送”。
程序员也没办法,那就只能做吧,然后就有了如下图所示的APP保活攻略:
这么多的应用程序都想长驻于后台,甚至在手机内存不足的情况下依然使用保活策略强行让应用存活,可谓丧心病狂,所以你的手机卡在正常不过。
b.安卓8.0及以上的系统
安卓8.0系统做了很大的改进,它对后台进程有了严格的限制。当APP进程从前台切换至后台后,系统将在几分钟内回收进程。并且进入后台的进程无法创建新的后台进程,这样一定程度上将杜绝一些保活的后台进程。但是基于国内安卓的特殊性,我们找出了特殊应用能长驻于后台,手机QQ,亲测从后台进程列表中手动删除了QQ进程后过了2秒钟又重新出现在列表里(基于手Q的特殊性,暂不予讨论)。安卓8.0系统理论上做到了跟iOS系统一样的后台进程的管理限制,也大大减少了8.0以前后台进程泛滥的问题,有效保证了手机长期使用的流畅性。 - 运行环境的差异
a. iOS应用的运行环境
iOS应用是直接运行在操作系统上的。不同于安卓,iOS应用上传至APP Store时已经编译成了机器码,可直接运行于操作系统上,所以效率非常高。
b. 安卓应用的运行环境
安卓应用是运行在虚拟机上的,每个应用都运行在单独的虚拟机实例里。由于虚拟机的一些局限性,所以相对于iOS应用,安卓应用的流畅度也相差不少,以下我们看下安卓虚拟机的历史变迁。
小知识:目前安卓代码(以Java为例)打包后是以字节码的形式存放在.dex文件中。
安卓2.2版本以前:
系统由dalvik担任虚拟机的角色,dalvik虚拟机采用解释执行的方式运行程序,效率低下。
安卓2.2版本
依然是dalvik作为虚拟机,但引入了JIT编译器,使dalvik虚拟机执行效率快了3~6倍(来自网上数据)。但是缺点依然明显:JIT编译后的热点代码没有缓存,每次应用重启后都需要重新编译。
安卓4.4版本
引入了全新的ART虚拟机,采用全新的编译策略AOT。AOT是运行前编译,在安卓系统安装.apk包时将.dex字节码全量编译成机器码。优点:运行效率高。缺点:应用安装效率低下。
注:此时ART和Dalvik是共存的,用户可以在两者之间进行选择。
安卓5.0版本
Dalvik虚拟机被废弃,系统全部使用ART作为唯一的虚拟机。问题:应用安装时效率低下,安装和应用升级时可能需要花费数分钟或者更长的时间。
安卓7.0版本
Android N 引入了一种包含编译、解释和 JIT(Just In Time)的混合运行时,以便在安装时间、内存占用、电池消耗和性能之间获得最好的折衷。应用在安装时不做编译,而是解释字节码,所以可以快速启动。ART 中有一种新的、更快的解释器,通过一种新的 JIT 完成,但是这种 JIT 的信息不是持久化的。取而代之的是,代码在执行期间被分析,分析结果保存起来。然后,当设备空转和充电的时候,ART 会执行针对“热代码”进行的基于分析的编译,其他代码不做编译。 这种混合使用 AOT、解释、JIT 的策略的全部优点如下。
① 即使是大应用,安装时间也能缩短到几秒
② 系统升级能更快地安装,因为不再需要优化这一步
③ 应用的内存占用更小,有些情况下可以降低 50%
④ 改善了性能
⑤ 更低的电池消耗 - 安卓垃圾收集机制需要消耗性能
由于Java语言没有提供释放已分配内存的显示操作方法,所以垃圾回收就托管给虚拟机。大家知道,GC是个非常繁琐的过程,虽然随着版本的迭代,各种垃圾收集器都不断的进行了优化,但是GC带来的性能影响也不可小视。
而iOS 5.0以后就采用ARC(Automatic Reference Counting)。简单地说,就是代码中自动加入了retain/release,原先需要手动释放内存的现在由编译器自动实现了。ARC不同于GC,它是在编译期间完成的,而GC是在运行时完成的,ARC不消耗运行性能,所以性能更优。