为什么Android手机越用越慢

2024-06-13 13:58
文章标签 android 手机 越用 越慢

本文主要是介绍为什么Android手机越用越慢,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

根据第三方的调研数据显示,有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手机永远像一个半成品或工程机的原因。

这篇关于为什么Android手机越用越慢的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

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

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

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

android应用中res目录说明

Android应用的res目录是一个特殊的项目,该项目里存放了Android应用所用的全部资源,包括图片、字符串、颜色、尺寸、样式等,类似于web开发中的public目录,js、css、image、style。。。。 Android按照约定,将不同的资源放在不同的文件夹中,这样可以方便的让AAPT(即Android Asset Packaging Tool , 在SDK的build-tools目

Android fill_parent、match_parent、wrap_content三者的作用及区别

这三个属性都是用来适应视图的水平或者垂直大小,以视图的内容或尺寸为基础的布局,比精确的指定视图的范围更加方便。 1、fill_parent 设置一个视图的布局为fill_parent将强制性的使视图扩展至它父元素的大小 2、match_parent 和fill_parent一样,从字面上的意思match_parent更贴切一些,于是从2.2开始,两个属性都可以使用,但2.3版本以后的建议使

Android Environment 获取的路径问题

1. 以获取 /System 路径为例 /*** Return root of the "system" partition holding the core Android OS.* Always present and mounted read-only.*/public static @NonNull File getRootDirectory() {return DIR_ANDR

cell phone teardown 手机拆卸

tweezer 镊子 screwdriver 螺丝刀 opening tool 开口工具 repair 修理 battery 电池 rear panel 后盖 front and rear cameras 前后摄像头 volume button board 音量键线路板 headphone jack 耳机孔 a cracked screen 破裂屏 otherwise non-functiona

Android逆向(反调,脱壳,过ssl证书脚本)

文章目录 总结 基础Android基础工具 定位关键代码页面activity定位数据包参数定位堆栈追踪 编写反调脱壳好用的脚本过ssl证书校验抓包反调的脚本打印堆栈bilibili反调的脚本 总结 暑假做了两个月的Android逆向,记录一下自己学到的东西。对于app渗透有了一些思路。 这两个月主要做的是代码分析,对于分析完后的持久化等没有学习。主要是如何反编译源码,如何找到