IT技术互动交流平台

Android 4.4 和 Android 7.0有什么不一样吗

发布日期:2019-05-01 15:45:02

    作为在相同配置的设备上(1G,这个配置应该最能体现出不同系统版本之间的区别了)开发过基于Android 4.4(API 19)和Android 7.0(API 24)应用,应该算是最有资格回答这个问题了。我主要从开发者的视角、用户体验的角度来说一下自己这两个系统之间的区别。

  首先有必要说明一下,这个问题不能是单独对比不同Android系统版本之间的区别,还要考虑到开发者素质在变化这一因素。一个是13年的版本,另外一个是16年的版本,这个过程中Android的系统在进化,开发者的素质同样在进化,个人认为作为应用开发人员,终极目标是开发优秀用户体验的应用,同一个程序,做完跟做好是天差地别,也是体现开发经验、素质和能力的一个重要参考指标。13年的时候提升应用性能的手段有限(Android并没有提供足够多、趁手的性能检测工具)、开发的大环境没有现在好、目标和现在不同(13年更多的是快速占领市场),但到了今天,性能和体验差的应用会被市场淘汰掉、用户越来越挑、竞争对手越来越多、Android平台的工具和资源越来越丰富和成熟,各种因素“逼”着开发者在进步,可以说是不可同日而语了。

  就在相同配置下,同一个应用(肯定不是绝对相同,这个过程中应用本身也做了很大力度的优化)在Android 4.4和Android 7.0的表现来看,能感受到的区别有:

  应用启动速度:尤其是应用的冷启动速度,改善明显,从测试反馈的结果来看,从点击桌面图标到跑应用自己的Application这段时间明显缩短了,这是实打实的用户体验提升;

  流畅度:这个也是感受最明显的地方,通过帧率检测以及测试反馈,7.0的流畅度会比4.4好很多;

  功耗问题:这个是感受最深刻的地方了,包括我也在5.1上做过应用开发,从Android 6.0开始,关于整机功耗问题是质的飞跃;

  API效率:首先是弃用了很多API,使用更高效的API做了替换;有的是直接改善了API的耗时问题,比如AnimationDrawable;有的是使用新的技术解决方案,比如自定义字体(从Typeface转到使用资源文件加载字体了,support包可支持);

  从近几年的Google IO也可以看得出来,从Android 6.0开始,到Android 8.0,Google着重在改善Android系统的用户体验,包括但不限于:

  Android系统性能的改善,着重优化了后台和系统流畅度;

  帮助Android应用开发者改善应用性能问题,提供了丰富的性能检测工具,比如开发者选项、DDMS、Android Monitor(Android Profiler)、batteryhistorian等,并且在Youtube上推出了Android Performance Patterns专题,100多个小视频帮助应用开发者提升应用的性能和体验;

  Android的安全问题的改善;

  模块化,包括MVP、MVVM、Instant App以及今年推出的应用开发框架。

  受限于个人视野和能力问题,这些观点只是个人意见,陈述一下从应用开发者的角度看到这两个系统之间的变化,不足之处恳请多多指导。

  很久前写过一个安卓保活的小程序,双native进程保活,那时候老机型很多,公司里一些安卓开发者用得挺习惯的……

  最近新上了一个项目需要用到保活,新来的小伙子用他自己的miui8做测试,基于Android6.0系统,发现保活失效了。

  当时一脸懵逼,发觉一点屏幕上的结束进程就被回收了。

  有点不服气了,上绝招。

  父进程创建两个子进程后退出,两个子进程分别设置为各自进程组的组长。多次fork。再加个Android service两两互保。把所有想中断进程的信号能忽略的都忽略掉,确保程序不会受到除了sigkill之外信号的影响。

  结果全都没卵用!!!

  翻出了Android6.0源码,全程跪着看完。新启动的进程创建为一个组,之后你不管怎么处理,子进程都会记录在这个组里,杀进程整组一起杀。理论上来说,只要几个互保的进程动作足够快,就算杀一组应该也有反应时间的。

  事实是在我的小米上测试从没成功过。有点怀疑小米是不是在准备杀进程的时候先将所有进程给挂起了,不然我不可能连一次执行代码的机会都没有。

  后面没再往下跟了,因为这个功能就算能改好,也不适应所有机型了,没有意义。

  另外,在我的设备上,微信同样也做不到保活……经常会发生放到后台一段时间后要重新打开才能看到消息的情况。

  回到问题,4.4跟7.0差距大吗?答案是很大,流畅性跟安全性的差距都不是一点点。

  进程管理的改进可以结束很多乱来的流氓软件,虚拟机从dalvik变成art提高了速度和流畅性,还有不少推倒重来的东西。

  这些细节分开来看可能不明显,但是我想很多翻过Android代码的人都能看到其中的改变。(这个题目下很多都是Android开发者吧)

  --------------------- 补充一段,害怕被骂。

  从技术上来说,做保活的时候觉得挺有意思,但想做出来并不代表真的想把这功能放到产品里。

  我们也怕被骂啊。

  我们是开发者,也是用户,对这些一启动就开多个进程,又耗电又杀不掉的app,我们也受不了,但有时候真的没多少选择。

  一个最简单的例子,消息推送,企业级的产品很多情况下是设备只能连接内网,不能用手机自有的推送方案(说实话国内这么多不同的厂家也真不可能分别针对机型集成他们的推送sdk),这时候就要保持一个长连接用于消息的接收,还要保证这个连进程活着,不能被挂起或者结束。

  保活就成了一个很恶心却又不得不做的方案。

  我们公司的大领导都是出身技术,现在四十岁还在写代码,也是知道这些方案的缺陷的。说实话他们也不喜欢。

  但是你想想,给企业做了一款协作软件,里面有即时通讯的功能,领导蹲坑的时候发了一条消息说九点半开个小会,到了九点半没几个到的,其他人没收到消息因为进程被结束或者挂起了……

  现在这个样子是最好的,大家都一样用不了保活,还是回到重新公平竞争的起点。

  所有人都做不到,客户也不会用这个理由来提奇葩的需求。

  所以从纯粹的技术上来说,失落吗?失落,因为一个问题摆在那里无法解决,作为一个程序员多少无法释怀。

  但是作为开发者来说,欣慰吗?欣慰,因为这么多年终于看到Android从当年的稚嫩一点点走向成熟了(虽然国内部分厂家的深度定制系统还是有不少坑就是了)

  关于几个问题做一下统一回复。

  1.国内厂家提供的手机是不是有对进程管理做修改?

  应该是,我观察过我用的比较多的两家厂商,华为小米,都有对做进程管理做改进。

  比如评论中有朋友提到的神隐模式,会让应用在后台放置一段时间后进程就被挂起(给我感觉有点像是ios,ios现在不是假后台,但是除了配置voip电话、音乐应用等特殊属性之外,其他应用进后台一段时间后都会被挂起,内存被dump出来,等到重新回到前台才加载回内存)不过国内厂家的这些模式细节处理还不是很完善。

  我见过比较奇葩的一个设备,也有类似的内存管理模式,程序进后台之后被挂起,搞笑的是程序恢复成前台之后就失去了网络访问权限,必须杀掉重来!!!

  厂家名字就不说了。

  2.关于安卓开发者是否需要掌握native?

  我个人做的是linux c++ 后台和偏向于底层的开发,java层做的比较少,大多出于兴趣。但是我个人觉得,安卓开发者起码要对native要有一定了解。

  C++饱受诟病,但多少了解一些能让你更深入理解android系统。android.jar是如何通过libjavacore.so调用到底层函数的、dalvik 或者art的启动流程、相关的进程管理模式等等,退一万步就算你不想知道这些,jni起码要懂吧。

  java做界面,部分核心的数据处理功能,像是图像、加解密、流媒体这些,直接用C层的开源库套一层jni的接口,不也很好用?

  我面试过5年左右经验,jni不了解、虚拟机启动不知道、对android每个版本的变更都说不出几个点的android开发者。

  也面试过2-3年经验,虚拟机、进程、线程、内存管理、垃圾回收、热更新各种机制随手拈来的开发者,据他说的每个版本android的源码都会粗粗浏览一次......(面试完这个小伙子之后我有点腿软,出去的时候一身汗)

  大部分人很难做到像知乎大神一样大学的时候就能实现数据库了,但是我觉得不想沦落为纯粹为堆代码的熟练工人,对于系统本身还是应该要有更深入的了解。

  我就很不解,这个问题挂着个“Android开发”的标签在我的time line上刷了一个星期多了,每次点进去都是些技术无关的回答,还有那个高票的“未入门程序员”在说这完全技术无关的呓语。不考虑驱动适配,不考虑预装软件的资源占用,不去研究每次大版本升级到底升级了些什么,却去扯大人小孩算数学,有什么意思? 这个样子我把Android开发这个标签去掉行不?关注这个话题不是为了看撕逼和抖机灵的

  以下链接中附带了Android开发官网上每个版本对于API的变更,现在Android Developers官网已经有中文翻译了,各位可以直接点进去看。

  Android系统的每次大版本升级都伴随着Google对一系列机制的优化,比如内存占用,应用程序的运行机制,这些你们表面上是看不到的,我随便举几个例子

  传统的一些进程保活机制,比如多个进程相互守护,在2.x版本上可以生效,到了最近几个版本Google修改了进程管理模式之后,就算相互守护也肯定会被用户杀掉。

  Android4.4,ART机制加入,提高应用程序的运行速度,同时由于一系列优化,Android 4.4 相比于之前版本反而降低了系统硬件要求   Android 5.x版本,继续优化了ART机制,5.0以后Android提供了系统级的Material Design支持,也就是说类似于点击的涟漪效果,使用原生控件在5.0以后就会看到。   文档中没有提及,但我在实际项目中发现的是5.0对于应用后台权限进一步缩紧,一个应用想通过getRunningTask的方式获取应用进程信息已经不可行,必须通过权限申请(具体我记得不是很清楚)

  Android 6.x版本,动态权限机制加入,doze模式加入,优化电量管理,同时对应用程序使用在Native能做的事情做了更多限制。

  7.x版本,除了正常提及的优化外,Google修复了通过创建notification并立即cancel达到创建一个隐藏的前台进程的bug,这也是为什么很多用户更新到7.x之后,会看到通知栏上有一堆“xxx 正在运行…”这样无法取消的通知,因为原来被cancel掉的通知现在无法cancel了

  即将出来的Android O,更多限制,而且即将对一片混乱的推送开刀。

  可以看到为什么很多人觉得升级系统之后运行快了,除了一些大的优化之外,也是因为Android后台,随着版本升级正在从蛮荒走向秩序,容易被恶意利用的bug不断被修复

  Android版本升级,不考虑预装软件的因素,肯定是会让你的使用体验越来越好

延伸阅读:

Tag标签:
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规