安卓手机越用越卡越用越慢?看看安卓APP是怎样在手机后台自动启动的

Google的这些作为让Android系统在流畅度上有了实质性的突破,从宏观上讲,Android是越来越不卡越来越流畅,那么,在如今这么强大的硬件支持下,为什么还会让很多人觉得越用越卡呢?

自2008年第一部Android手机发布至今,虽然在操作体验上一直生活在iOS阴影之下,但不可否认,Android是越来越强了,与iOS的差距越来越小,尤其是一向被诟病的流畅度,在Android 5.0之后更是有了质的飞跃。如今的Android手机,在八核处理器4GB内存加持下,一样也可以做到如丝般的顺滑,然而……

安卓手机越用越卡越用越慢

“野火烧不尽,春风吹又生”,非常应本文之景

“安卓越用越卡,有本事用半年再比比!”,好像真是这样,竟然反驳不了。

以前,Android为什么不如iOS流畅?

以前,Android的流畅度不如iOS,其实原因也很简单:

一是先天不足

在Linux上跑个虚拟机,再用JAVA做开发,虽然能减轻开发负担,获得浩瀚资源,但在后期优化上的成本增加更多,Java没有提供任何操作来释放内存(iOS的开发语言Object C能自行控制内存释放),是通过系统的内存回收机制来进行管理,但内存回收是个双刃剑,GC(Gabage Collection,垃圾回收)时所有线程都要暂停,也就是所谓的卡顿。

安卓手机越用越卡越用越慢

Android的系统架构

二是后天开放带来的混乱

强制与封闭,给iOS的应用带来了高度的统一和标准,而开放的Android必然带来混乱这样的负面作用,碎片化是众所周知的恶果,一些应用为了兼容更多旧款设备,只得继续使用低level的API,如微信,现在还是使用API level 9,就是为了能在Android 2.3系统上使用,而Android 5.1支持的API level已达到22了,效率上显然大打折扣,除此之外,开发上的开放性更是一个非常大的隐患,这也是今天要谈的主要问题。

iOS为了流畅度,其实做了非常多的妥协来换取用户体验上的好感,比如墓碑式内存管理、优先UI渲染等,Google在2012年提出了黄油计划(Project Butter),开始着手解决Android卡顿这个老大难问题,并从Android 5.0开始,将Dalvik虚拟机全面转向ART虚拟机,后者在安装应用的时候会进行预编译,将代码转换为机器语言存储在本地,这样在运行程序时就不用每次都编译一次,执行效率得到大大提升,同时,新的ART模式也降低了每次GC的时间,一些额外的优化也可以避免GC的频繁发生。

安卓手机越用越卡越用越慢

黄油计划的垂直同步与三重缓冲让操作更一致顺滑

Google的这些作为让Android系统在流畅度上有了实质性的突破,从宏观上讲,Android是越来越不卡越来越流畅,那么,在如今这么强大的硬件支持下,为什么还会让很多人觉得越用越卡呢?

现在,Android越用越卡:APP在后台不断重生

到了今天,随着硬件的发展及系统的不断改良优化,Android架构上的先天不足已经是影响甚微,从那些旗舰新机的表现足以证明了,秒开、流畅、顺滑……绝不输于 同级别iPhone,但是,这通常是指出厂状态下的表现,如果装上几十个国产APP,情况可能会发生些变化——流畅度明显下降了,用户开始叫卡了。

显然问题出在这些APP上,前面说过,Android的开放是把双刃剑,在自由的背后往往潜伏着危险,善恶存乎一心,开发商掌控着进退大权,而以国人之尿性,抢占市场、提升APP活跃度往往是最重要的,既然我不流氓别人也会流氓,我为什么不更流氓呢?

Android应用开发有四大组件,广播接收器(BroadcastReceiver,以下简称Receiver)就是其中之一,它用来接收来自系统和应用中的广播,你也可以理解它是一个监听器,比如当电量变化时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户保存进度或进入省电模式等;当有电话进来,也会产生一条广播,就会通知电话接听或电话号码判断等。

安卓手机越用越卡越用越慢

各色各样的系统Receiver(采集于ROM Toolbox)

在Android中,全局的Receiver就近百种,可以监听各色各样的状态变化,比如开关机、通电断电、网络状态变化、电量变化、安装卸载应用、电话呼出呼入、SD卡变化等。开放的Android允许应用程序注册任意个Receiver, 这也成为流氓应用滋生的温床,不良的开发者向系统注册多个静态Receiver,接受各种广播通知,然后执行相应的Activity,比如自启动。

Android越用越卡的主要原因在于,后台有大量应用在默默运行,而这些应用根本就是清理不掉的,它们会在收到各种各样的Receiver通知后并再度启动,我能想到最好的描述就是“野火烧不尽,春风吹又生”。作为对比,iOS中被杀掉的后台进程再启动的方法很有限,简单的说,iOS是真的能清理内存,而Android中许多应用挥之不去,不断重生,各种进程与服务在后台偷偷运行,从而引起系统卡顿与耗电,其实又有几个开发商会为你手机的电池着想呢?

Android不良应用的重生,主要有两种途径:自启动和关联唤醒。

你想都想不到的自启动

自启动,可能在我们意识里它就等于开机自动运行,在Windows下倒也没差,但在Android下你就太小瞧它了,开机自动运行只是众多自启动方式中的一种。在Windows中,你关闭某个软件后,它基本上不会再自行启动了,然后Android中由于有Receiver这种东东,让自启动变得很容易。

还是来点具体实例,看看国外APP与国内APP的节操对比:

安卓手机越用越卡越用越慢

作为同类型电商APP,eBay只有在收到三种Receiver后可能会启动,而且这三种都是比较规范的,反观“手机淘宝”,共有九种自启动行为,除了eBay那三种外,还可能在收到应用卸载等六种Receiver后启动,我只是想问,我设置时间、卸载应用和你淘宝有半毛钱关系?

很可惜,国外的APP在国内基本没办法用,而国内的不管是优秀的APP还是山寨国外的APP,大多数以抢占市场、提高应用活跃度为主,拼着命变着法子让自家APP处于活动状态,一键清理内存还有什么用呢,过几分钟又如野草般齐刷刷地长了出来。其实“手机淘宝”这个APP还算好的,看个更变态的:

安卓手机越用越卡越用越慢

百度云有19种自启行为

百度云APP高达19种自启行为,打电话、发短信、充电、连网、换个WIFI等等,这些日常的手机操作,都能让百度云不断重生自启,与你如影随行,而且是隐蔽不可见的。

当你接到电话(呼入电话Receiver)后,还会发生这些事:

安卓手机越用越卡越用越慢

接到电话的同时,在后台已启动了“百度云”“有道云笔记”等

当你收到短信(接收短信Receiver)时,还会发生这些事:

安卓手机越用越卡越用越慢

收到短信的同时,后台会启动“支付宝”,并且……

打电话是最基本的手机功能,但是当你打电话/发短信时,后台早已是波涛汹涌。除了一些应用会完成自启行为外,还可能会唤醒其它的应用,如收到短信时“支付宝”会自启动,“支付宝”启动后还会唤醒“手机淘宝”,这就是大家平常所说的“全家桶”,也就是APP重生的另一途径——关联唤醒。

下一页更多精彩内容

传送门

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:1   其中:访客  1   博主  0

  1. 康意虹 5

    好!谢谢!