安卓手机为什么越用越卡越慢 问题原因探究(转载 文/阑夕)

2023-12-30 22:30

本文主要是介绍安卓手机为什么越用越卡越慢 问题原因探究(转载 文/阑夕),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

根据第三方的调研数据显示,有77%的Android手机用户承认自己曾遭遇过手机变慢的影响,百度搜索“Android+卡慢”,也有超过460万条结果。在业内,Android手机一直有着“越用越慢”的口碑,这个现象甚至超出了硬件范畴——很多中高端Android手机在硬件参数上都优于同一代iPhone,但是它们仍然会在使用半年到一年的时间后进入“欠流畅”的状态——这无疑是一件令人困扰的事情。

然而,若是要回答这个问题,我们需要追溯到上个世纪,去寻找智能手机的起源。

西方历史及奇幻文学作品十分热衷于表达“血统”的设定,其传统文化认为血统可以决定天赋,并引出“命运是否被注定”的哲学思考。比如大家比较熟知的《哈利波特》系列,解构之后就不难发现,这实际上是一部讲述格兰芬多与斯莱特林两支血统及其传人的厮杀史(哈利波特是格兰芬多的后代,继承了其勇气,伏地魔是斯莱特林的后代,拥有着其野心),而无处不在的预言(一个终将杀死另一个),也贯彻了西方惯有的宿命论情结。

到了科技行业,“血统”的定义被“基因”所取代,一个公司有着什么样的基因,决定了它的擅长领域,这种评价也被广泛接受,成为唯物时代独树一帜的唯心理念,并经受住了事实考验——当我们试图解释微软失落于互联网、Google败退于社交网络、百度止步于电子商务的原因时,都会由衷的感慨“原来剧本早在多年以前就已经写好了”。

同样,为什么Android手机的“卡慢”问题永远比iPhone要更加严重,它的答案也从一开始就注定了。

1965年,贝尔实验室、通用电气和麻省理工学院开始合作开发一套能够兼顾易用性和强大性的操作系统,经过六年时间的通力协作,贝尔实验室的一名软件工程师Ken Thompson在休假期间完成了一个名为Unix的系统编写,并最终成为贝尔实验室的母公司、美国电信巨头AT&T的商业产品,并启动了长达数十年的版权运作。尽管后来有着许多变种,但是从严格意义上来讲,Unix不是一个开源的操作系统。

1991年,一个芬兰的大学生、同时也是计算机黑客的Linus Torvalds,他对Unix十分着迷,但是买不起运行Unix需要的工作站,所以他就尝试自己以同样的编程方式写了一个名为Linux的操作系统,并在自由软件之父Richard Stallman的精神鼓舞之下,将Linux加入到了自由软件基金(FSF)当中,允许所有人使用、拷贝、修改甚至销售Linux系统,同时承担开源义务,禁止把Linux封闭化的企图。

之所以要如此大费周章的讲述Unix和Linux两个操作系统的故事,是因为iOS和Android,正是分别基于Unix和Linux而衍生出来的作品。也就是说,是Unix和Linux的两种特性,造成了iPhone与Android手机在使用体验上的巨大差异。

乔布斯曾经邀请Linux的创始者Linus Torvalds到苹果工作,放弃Linux的开源,协助开发Mac OS封闭式的Mach内核,后者与乔布斯大吵一架之后明确表示拒绝。而从Mac OS开始,苹果就将操作系统的私有化视为企业战略,用乔布斯的话来讲,他是将iOS装进了iPhone这个盒子里,然后卖给了用户。所以,iPhone之所以不会出现“越用越卡”的情况,是因为苹果公司对它的手机从硬件到软件拥有最高的管理权限,在封闭式的环境中,来自第三方的应用程序无法调用超过iPhone承受限度的指令,自然也不可能造成持续性的系统损伤。

反观Android手机,由于开源的公开条件,Google无法从代码这一端口约束第三方的应用程序,同时,由于Linux核心设定应用在调取系统功能时一定要取得ROOT权限,这也导致大量应用因为单一功能的实现需求而获得整个ROOT层面的支配,可以在Android手机的任意储存位置进行读写,这种高自由度无异于开启了潘多拉魔盒,让Android手机无法对恶意App事先设防。这也是开源软件备受争议、且在商用领域遭到抵触的原因:它只关心是否授予了用户自由——这个自由也包括逾越边界的自由——而没有从最坏的出发点去考虑如何规避被滥用的风险。尽管Google作为巨头,一直在尝试对产业链进行统一管理,但是当这条产业链日益庞大、连Google也只能扮演其中之一的角色时,Android的失控也就在情理之中了。比如,Android的最新版本通常需要花费超过一年半的时间,才能使激活它的Android手机占比超过50%,但是iOS 7只用了两个月,就让半数以上的iPhone都更新完毕。另外,一款应用程序如果被苹果从App Store中惩罚出去,它就再也无法被安装到任何一款合法的iPhone里面,但是如果一款应用程序被Google驱逐出Google Play,但是它还是可以登录各种第三方应用市场,提供正常的下载和安装。

所以,Android的这种天生短板,又催生出了一个“手机调校”的市场,并带动了新的产业链。

“手机调校”的第一级,在于系统层。在Android 4.4以及之后的Android L的规划中,它将应用程序的运行模式由Dalvik换成了ART,其原理简单来说是“预编译”效果,即当一款应用程序在第一次被安装到Android时,它的字节码就已经被编译成为了本地的机器码,减少后续运行应用程序时的启动和执行时间。

根据Google自己公布的结果,在不同的性能测试App中,ART的速度对比Dalvik的平均提升幅度达到了80%,在某些项目中,ART的提升幅度甚至超过了1.5倍,这个结果可谓非常喜人。

这是Google希望从源头解决Android卡慢问题的努力,但是这只是对性能优化有着作用,无法解决因为应用程序违规调用资源而产生的问题。同时,由于在安装应用程序时进行了“预编译”,整个安装时间将会变长,安装完毕后生成的文件也会变大,比如最新的Google+安装包只有6.9M,但是它安装后的APK大小达到了28.3M,这对Android手机储存空间又存在过多占用的问题。

“手机调校”的第二级,在于ROM层。作为全球最大的Android市场,中国的许多手机厂商都以开发专用ROM来为销售产品添彩,大多数的ROM,也都会考虑对Android系统进行优化,比如MIUI V6就宣称“引入多种Linux系统内核内存优化技术,提高应用运行效率”。

也就是说,与Google做的事情一样,ROM厂商主要的优化工作,也是对Linux动刀,打上各种补丁,使其底层语言能够更好的适配到各种手机终端上。还是以MIUI V6为例,在介绍新特性时,其有这么一条:“ZRAM调度优化技术”,其实ZARM就是Linux内核里的一个内存模块,作用就是在内存中划出一个部分出来充当虚拟盘,来承载Linux的交换分区,将一些任务压缩容纳进去,使内存的使用率提高,让CPU来为内存服务(因为目前的智能手机普遍CPU过剩、而内存才是瓶颈)。

不过,ROM也是一把双刃剑,它对于Android底层系统的修改,以及它对于内存空间的占用,又都有增加手机负载的风险。

“手机调校”的第三级,在于应用层。大量应用程序在手机中发生的意外或故意占用事件,是造成Android手机越来越慢的最核心原因。过多的应用程序热衷于滞留在内存空间里、以及将大量碎片留在储存空间里,是带来麻烦的罪魁祸首。这也是为什么即时清理类应用得以逐渐成为Android手机标配。

Android系统有七类进程,分别是前台进程、可见进程、主要服务、次要服务、后台进程、内容供应节点、空进程,在没有安装清理类应用的时候,一部Android手机只能依赖系统默认的分配机制来自动调节内存使用,只要应用程序提出请求,大部分进程只要打开后都会被保留在内存当中,这原本是为了让用户在再度激活这些进程时不需要重新载入、节省时间的初衷考虑,但是Android没有料到激烈的市场竞争会驱使应用程序产生“劣币驱良币”的趋势,很多开发者出于商业目的,在不需要留存在内存的情况下也想方设法的让应用程序保持潜在运行状态,一个两个还好说,但是一旦数量更多,Anrdoid手机就会频频卡顿和发热。

以目前全球用户规模最大的Android手机清理类应用“猎豹清理大师”为例,它清理的进程类型,主要放在后台进程、次要服务、内容供应节点和空进程:

后台进程(Hidden)——这个是最优先被扫描和识别出来的进程,因为大部分Android用户在切换应用程序时都不会使用返回键退出,而是直接按下Home键,前者会让应用进入空进程(占用资源相对较小),而后者则会保留为后台进程(占用资源相对更大),尤其是当游戏类App在后台运行时,它会和其他App争抢资源,而不会在乎那款App是不是用户正在使用。根据猎豹清理大师的统计,约有20%的常用App即使不运行时也在后台启动联网,主要是提交产品及用户使用信息、获取广告信息、查询是否升级等。

次要服务(Secondary Server)——比如某些企业套件、邮箱联系人、触控接口等,这些进程很多都是系统自带的,有些用户会使用,但是有些用户也可能不会使用或已经有了替代应用,所以猎豹清理大师的清理逻辑是基于用户行为和授权来建立(分为建议清理和深度清理两类);内容供应节点(Content Provider)——这部分进程没有程序实体,仅仅提供内容给其他应用使用,比如日历供应节点、邮件供应节点等,除了占用内存资源之外,它还会占用网络,所以也会给Android手机造成不必要的负担;空进程(Empty)——如果是通过返回键退出应用,大部分的应用也会在Android手机的内存里遗留一个空的进程,这个进程没有数据运行,但是会记录应用的历史信息,几乎没有任何价值,同样,这部分进程内容被干掉的优先级也很高。

除了对内存的过度消耗之外,Android手机也容易在储存中积累大量冗余数据,包括无法卸载的预装应用、卸载之后的残存文件以及使用应用的过程中产生的缓存,由于Android本身没有提供管理工具,即使将手机连接电脑之后也是如同Windows树状结构一样的文件夹包,用户很难独立判断哪些文件夹可以删除、哪些文件夹是系统必备的,最后也会导致手机尺寸空间愈来愈窄的情况。

“手机调校”的问题,可能又回带来用户操作的负担增加,其心理压力甚于行为压力,玩着手机还不忘隔三差五的使用清理功能,这种与iPhone相比“别具特色”的操作习惯,也是Android手机永远像一个半成品或工程机的原因。

这篇关于安卓手机为什么越用越卡越慢 问题原因探究(转载 文/阑夕)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/554185

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

缓存雪崩问题

缓存雪崩是缓存中大量key失效后当高并发到来时导致大量请求到数据库,瞬间耗尽数据库资源,导致数据库无法使用。 解决方案: 1、使用锁进行控制 2、对同一类型信息的key设置不同的过期时间 3、缓存预热 1. 什么是缓存雪崩 缓存雪崩是指在短时间内,大量缓存数据同时失效,导致所有请求直接涌向数据库,瞬间增加数据库的负载压力,可能导致数据库性能下降甚至崩溃。这种情况往往发生在缓存中大量 k

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

Codeforces Round #240 (Div. 2) E分治算法探究1

Codeforces Round #240 (Div. 2) E  http://codeforces.com/contest/415/problem/E 2^n个数,每次操作将其分成2^q份,对于每一份内部的数进行翻转(逆序),每次操作完后输出操作后新序列的逆序对数。 图一:  划分子问题。 图二: 分而治之,=>  合并 。 图三: 回溯: