原文链接:http://blog.csdn.net/haovip123/article/details/54618642
背景
Android5.0(Android Lollipop)是谷歌公司2014年10月发布的全新安卓系统,至今已经两年多。然而由于国产手机对安卓ROM的深度定制或修改,以及手机厂商、芯片制造商、运营商之间错综复杂的关系,我们更新最新安卓版本往往需要1年左右时间的等待。2015年5月发布了Android6.0(android Marshmallow),2016年8月发布了Android7.0(Android Nougat)。目前来说,用上6.0系统的手机都不太多,Android4.4和Android5.1版本占比重较高。但是,随着时间推移,手机陆续都会升级到更高的系统版本,所以,提前学习到各版本的新特性,把一下好的效果添加到代码中,并尽量做到向下兼容,应用才能拥有更好的体验,面对升级过后的系统才能从容不迫。
概述内容
从Android 5.0(Android Lollipop)开始,android迎来了扁平化时代,使用一种新的Material Design 设计风格,设计了全新的通知中心,开始支持多种设备。在性能上,放弃了之前一直使用的Dalvik虚拟机,改用ART模式,程序加载时间大幅提升。增加了Battery Saver模式来进行省电处理,以及全新的“最近应用程序”。
Android 6.0(Android Marshmallow)最大的亮点是为用户提供了两套相互独立的解决方案,简单的说,就是为每位用户的每一个应用提供了两套数据存储方案。一套存储工作资料,另一套存储个人信息。另外Android M系统层面加入指纹识别,还加入了运行时权限,加入了App Standby(应用待机)、Doze(瞌睡)Exemptions(豁免)等模式来加强电源管理。
Android 7.0(Android Nougat),在性能处理有了巨大的提升,同时对文件数据加密,更加安全。 添加了分屏多任务,重新设计了通知,改进Doze休眠机制等。总而言之,Android N将更快,更高,更强。
Android 5.0新特性
Material Design
提起Android5.0,就不得不说Material Design,扁平化的设计理念。新的视觉语言,在基本元素的处理上,借鉴了传统的印刷设计,字体版式、网格系统、空间、比例、配色、图像使用等这些基础的平面设计规范。
之前的一些需要自定义的效果,现在都提供了系统级的支持,用起来更加方便了,而且android提供的效果看起来更加流畅。这里篇幅较多,本着不重复造轮子的思想,笔者找了一片写的很全面的Material Design的网站,图文并茂,值得学习。
Meterial Design开发者参考文档。 http://www.materialdoc.cn/
支持多种设备
现在无论是智能手机、平板电脑、笔记本电脑、智能电视、汽车、智能手表甚至是各种家用电子产品,谷歌的Android系统已经可以在所有设备的屏幕上出现。而这一概念与微软不谋而合,之前微软也宣布将会把Windows 10打造成跨设备跨平台的统一系统,帮助自己走出困境。
全新通知中心设计
谷歌在Android Lollipop中加入了全新风格的通知系统。改进后的通知系统会优先显示对用户来说比较重要的信息,而将不太紧急的内容隐藏起来。用户只需要向下滑动就可以查看全部的通知内容。
新的通知系统另外一个很酷的新功能是在锁屏界面也可以直接查看通知消息了。不仅如此,用户还可以直接在锁屏的情况下就行回复或进入应用。另外,如果在操作手机的过程中有电话进入,也不会进行全画面切换,而是同样以弹出通知的方式告知用户。
支持64位ART虚拟机
新系统不仅在视觉效果上带来了巨大的变化,Android Lollipop还在内部的性能上进行了飞跃。首先,新系统放弃了之前一直使用的Dalvik虚拟机,改用了ART模式,实现了真正的跨平台编译,在ARM、X86、MIPS等,无处不在。
ART 虚拟机编译器在内存占用及应用程序加载时间上进行了大幅提升,谷歌承诺所有性能都会比原来提升一倍。另外,对64位的支持也让ART虚拟机如鱼得水,开发者可以针对像ARM Cortex-A57这样的64位架构核心开发应用程序。Android Lollipop支持更大的寄存器,支持新的指令集,提升了内存寻址空间,未来Android智能手机将支持4GB以上的内存。
《Android ART运行时无缝替换Dalvik虚拟机的过程分析》 http://blog.csdn.net/luoshengyang/article/details/18006645
Project Volta电池续航改进计划
Project Volta计划增加了新工具可以让开发者能够更容易的找出为何自己的应用程序会对电量产生比较大的影响,同时确保在执行某型任务时将手机电量的影响降至最低。首先,Battery Historian可以列出手机电量消耗的详细情况,帮助开发者识别电量消耗的原因或者是哪个硬件或任务对电池寿命的影响比较大;而Job Scheduler API则可以让开发者更容易的选择合适的时机触发电量消耗比较高的任务,避免在低电量或未完成充电时更新应用程序。
上面是针对开发者的改进,而在用户层面上,Android Lollipop增加了Battery Saver模式,这与三星和HTC上的超级省电模式有些类似。在低电量的时候系统会自动降低屏幕亮度、限制自动更换背景等功能。
全新的“最近应用程序”
除了界面风格设计的改变之外,新的最近应用界面还借鉴了Chrome浏览器的理念,采用单独的标签展示方式。更重要的是,谷歌已经向开发者开放了API,所以第三方开发人员可以利用这个改进为特定的应用增加全新的功能。
改进安全性
现在个人识别解锁还是一个比较新鲜的智能概念,当用户的蓝牙耳机连接到手机或平板电脑时,设备可以基于当前的位置或用户的声音自动解锁。比如当特定的智能手表出现在Android设备的附近,那么就会直接绕过锁屏界面进行操作。而Android Lollipop也增加了这种针对特定特任识别解锁的模式。换句话说,当设备没有检测到附近有可用的信任设备时,就会启动安全模式防止未授权访问。
另外,Android Lollipop还默认开启了系统数据加密功能,并且通过SELinux执行应用程序,这就意味着对于恶意软件来说,新系统变得更加安全。
不同数据独立保存
谷歌表示Android Lollipop将拥有一个全新的特性,让用户通过一台设备就可以搞定所有的工作和生活娱乐活动。该特性首先将各种数据独立保存,并且让所有新数据的生成都有依据。
我们已经看到谷歌已经与三星加强了合作,包括三星的Knox安全系统同样可以像Android Lollipop一样将重要数据和其它数据分开保存。另外谷歌还允许向三星以外的Android设备提供支持。
改进搜索
谷歌将新系统的搜索功能重点放在了“重新发现”上,因此这意味着Google Search将会更好的意识到用户正在做什么。比如系统会根据用户当前的位置自动过滤无关的搜索结果。
另外,当用户在进行应用搜索时,可以直接展示相似或部分提示,并且进入特定的应用程序而无需将内容全部输入。
支持蓝牙4.1、USB Audio、多人分享等其它特性
Android Lollipop还增加了多个新的API支持、蓝牙4.1、USB Audio外接音响及多人分享等功能。其中多人分享功能可以在用户手机丢失的情况下,使用其它Lollipop设备登录账户,从云端下载联系人、日历等资料,并且不影响其它设备的内容。
Android 6.0 新特性
动态权限管理
Android 6.0引入了动态权限管理,将标记为危险的权限从安装时权限(Install Time Permission)模型移动到运行时权限模型(Runtime Permissions):
安装时权限模型(Android5.1以及更早):用户在应用安装和更新时,对危险权限授权。但是OEM和运行商预装的应用将自动预授权。
运行时权限(Android6.0及以后):用户在应用运行时,对应用授予危险权限。由应用决定何时去申请权限(例如,在应用启动时或者用户访问某个特性时),但必须容许用户来授予或者拒绝应用对特定权限组的访问。OEM和运营商可以预装应用,但是不能对权限进行预授权。
运行时权限提供给用户关于应用所需权限更多的相关上下文和可视性,这也让开发者帮助用户更好的理解:为什么应用需要所请求的权限,授权将有什么样的好处,拒绝将有何种不便。用户可以通过设置中的菜单来撤销应用的权限。
受影响的权限
系统要求标记为危险(dangerous)的权限使用运行时权限模型。查看危险权限列表可以使用命令:adb shell pm list permissions -g -d 。
Android6.0并不改变正常权限的行为。正常权限指的是所有非危险(non-dangerous)权限,包括normal,system和signature 权限。正常权限风险较低,用于容许应用以最小风险来访问隔离的应用级别的特性。在Android5.1和早期版本中,系统在安装时自动将正常权限授予请求的应用,并不提示用户
请求权限
运行时权限模型适用于所有应用,包括预装应用。应用软件的要求包括:
运行时权限模型必须在所有运行Android6.0的设备上是一致的。这通过CTS来实施。
应用必须在运行时提示用户进行授权。
带有危险权限的预装应用,必须符合API level 23,必须维护Android6.0的AOSP权限模型(例如,应用安装的UI流程不应该脱离AOSP的packageInstaller的实现;用户可以撤销预装应用的危险权限;等等)。
无界面的应用必须使用Activity来申请权限,或者与其他有相应权限的应用共享UID。
权限迁移
在设备从Android5.x升级到Android6.0之后,授予应用的权限仍然有效。但是用户可以在任何时候撤销这些权限。
《Android 6.0: 动态权限管理的解决方案》http://blog.csdn.net/caroline_wendy/50587230
指纹识别(Fingerprint Support)
说到指纹识别,很多用户都会觉得现在的中高端安卓手机都支持,但事实上这些安卓手机的指纹识别都是各个厂商自行开发的并没有系统底层的支持。Android 6.0则在系统层面加入指纹识别,能提供原生指纹识别API,这不但降低了厂商开发指纹识别模块的成本,最重要的是原生指纹识别将会大大提升安卓手机的指纹识别支付安全性。
APP关联(App Links)
Android M加强了软件间的关联,谷歌在现场展示了一个例子,比如你的手机邮箱里收到一封邮件,内文里有以个Twitter链接,用户点击该链接可以直接跳转到Twitter应用,而不再是网页。
Chrome App Links这个就相当于在Web中使用Scheme来进行App的跳转功能一样,只不过这里Chrome默认就支持了,用户只需要搜索相关的关键词,就可以直接显示App,然后通过App Link直接启动App。这个东西对用户来说应该是一件非常好、方便的事情,但由于国内这些浏览器的问题,不知道能否会兼容这个功能。
Android pay
Android支付统一标准。新的M系统中集成了Android Pay。其特性在于简洁、安全、可选性。Android Pay是一个开放性平台,用户可以选择谷歌的服务或者使用银行的APP来使用它,Android Pay支持4.4以后系统设备,谷歌宣布Android Pay已经与美国三大运营商700多家商店达成合作,支付功能可以使用指纹来进行支付。
电源管理
Android6.0引入了下列特性来延长电池使用时间:
App Standby(应用待机): 系统可以将未使用的应用置为AppStandby模式,临时限制这些应用的网络访问,延迟同步和后台job
Doze(瞌睡): 如果用户在某个时间期限内未主动使用设备(屏幕关闭、设备静止),平台将进入深度睡眠状态。因为该特性要求平台检测静止状态,因此只有那些在Sensor HAL中实现了显式移动检测API的设备中才有效。
Exemptions(豁免): 预装在设备上的系统应用和云消息服务,默认通常被豁免。应用开发者可以要求其应用使用这种设定。用户也可以在设置中来豁免某些应用。
App Standby
对于不常用的应用的,AppStandby通过延迟后台网络活动和任务来延长电池寿命。
生命周期
● 检测:当设备不在充电时,且在某个特定时钟期限内和亮屏时长中,用户没有直接或者间接启动该应用。间接启动指的是:前台应用访问另外某个应用的service。
● App Standy模式中:平台限制应用一天内最多访问一次网络,延迟其同步和其他后台任务。
● 退出:当应用被激活,或者设备充电时,平台将该应用移出App Standby状态。
活动的应用不受AppStandby的影响。活动的含义是:
进程处于前台(Activity 或者前台服务,或者由另外一个Activity 或前台服务所使用),例如 notification listener,辅助服务,live 墙纸,等等。
供用户查看的通知,可以是锁屏通知或者通知图标。
用户显式启动的应用。
Doze
支持Doze功能的要求:
设备在Sensor HAL实现了significant motion detector (SMD) APIs 。
设备有某个云消息服务,如 Google Cloud Messaging (GCM)。这使得设备可以知道何时从Doze中唤醒。
生命周期
● 检测:当未在充电时,且当设备静止且灭屏了一段时间。
● Doze期间:平台尝试让系统处于休眠状态,周期性地进入在一个维持窗口恢复正常操作,然后进入更长的休眠状态。在休眠状态:
禁止网络访问
忽略 wakelock
延迟闹钟,除了闹铃 和使用setAndAllowWhileIdle()设置的闹钟,以荣喜日历等应用显示事件提醒
停止WIFI扫描
同步和后台任务被推迟到下一个维护窗口。
接收短信和MMS消息的应用位于一个临时白名单,这样他们可以完成其工作。
● 退出:
用户交互
设备移动
亮屏
闹铃
集成Doze
1. 确认设备支持 SENSOR_TYPE_SIGNIFICANT_MOTION .
2. 确认设备安装了一种云消息服务。
3. 在配置文件overlay/frameworks/base/core/res/res/values/config.xml中,修改:bool name=”config_enableAutoPowerModes”>true
4. 检查装应用和服务:
Use the new power-saving optimization guidelines. For details, see Testing and optimizing applications.
OR,Are exempted from Doze and App Standby. For details, see Exempting applications.
5. 确认必要的服务从Doze中豁免。
Exemptions
你可以在设置中,手动将某些应用从Doze和AppStandby中排除。
存储
在之前,安卓系统虽然可以支持TF卡扩展,但TF卡扩展的容量只能当成外置存储。虽然用户可以把照片、音乐等内容放进去,但App不能安装到其中。在安卓6.0中,当首次插入TF卡的时候,系统会询问会将TF卡作为外置还是内置储存。如果选择作为内置存储,系统则会对TF卡格式化并加密——注意,这会丢失数据!然后,TF卡的容量就和设备的内置存储融合了。
一般来说,设备的内置存储速度会比TF卡快上不少,稳定性也更高,因此如果不是容量特别紧张,并不建议把TF当成内置储存植入。同时,市面上支持TF卡扩展的安卓设备也越来越少,安卓6.0的这个新特性也许会遭到冷遇。
《Android数据存储之Android 6.0运行时权限下文件存储的思考》http://www.cnblogs.com/whoislcj/p/6137398.html
《Android6.0权限适配之WRITE_EXTERNAL_STORAGE(SD卡写入)》
http://unclechen.github.io/2016/03/06/
Android 7.0 新特性
Android7.0提供新功能以提升性能、生产效率和安全性。
关于Android N的性能改进,Android N建立了先进的图形处理Vulkan系统,能少的减少对CPU的占用。与此同时,Android N加入了JIT编译器,安装程序快了75%,所占空间减少了50%。
在安全性上,Android N加入了全新安全性能,其中包括基于文件的数据加密。谷歌移动版Chrome能识别恶意网站。
Android N可以进行无缝更新,与Chromebook一样,用户将不再需要下载安装,也不再需要进行重启。
在效率提升上,Android N可以自动关闭用户较长时间未使用的应用程序。在通知上新增了直接回复功能,并支持一键全部清除功能
分屏多任务
进入后台多任务管理页面,然后按住其中一个卡片,然后向上拖动至顶部即可开启分屏多任务,支持上下分栏和左右分栏,允许拖动中间的分割线调整两个APP所占的比例。
全新下拉快捷开关页
在Android 7.0中,下拉打开通知栏顶部即可显示5个用户常用的快捷开关,支持单击开关以及长按进入对应设置。如果继续下拉通知栏即可显示全部快捷开关,此外在快捷开关页右下角也会显示一个“编辑”按钮,点击之后即可自定义添加/删除快捷开关,或拖动进行排序。
新通知消息
通知消息快捷回复
加入了全新的API,支持第三方应用通知的快捷操作和回复,例如来电会以横幅方式在屏幕顶部出现,提供接听/挂断两个按钮;信息/社交类应用通知,还可以直接打开键盘,在输入栏里进行快捷回复。
通知消息归拢
Android7.0会将同一应用的多条通知提示消息归拢为一项,点击该项即可展开此前的全部通知,允许用户对每个通知执行单独操作。
夜间模式
Android7.0中重新加入了夜间深色主题模式,该功能依然需要在系统调谐器中开启,从顶部下划打开快捷设置页,然后长按其中的设置图标,齿轮旋转10秒钟左右即可提示已开启系统调谐器,之后用户在设置中即可找到“系统调谐器”设置项。点开其中的“色彩和外观”,即可找到夜间模式,开启后即可使用全局的深色主题模式,同时亮度和色彩也会进行一定的调整,该功能可以基于时间或地理位置自动开启。另外,系统调谐器中也提供了RGB红绿蓝三色调节滑动条,允许用户手动精细调节,例如减少蓝色或增加红色以提供类似护眼模式的效果。
流量保护模式
新增的流量保护模式不仅可以禁止应用在后台使用流量,还会进一步减少该应用在前台时的流量使用。推测其有可能使用了类似Chrome浏览器的数据压缩技术。此外,谷歌还扩展了ConnectivityManager API的能力,使得应用可以检测系统是否开启了流量保护模式,或者检测自己是否在白名单中。Android7.0允许用户单独针对每个应用,选择是否开启数据保护模式。
全新设置样式
Android7.0启用了全新的设置样式,首先每个分类下各个子项之间的分割线消失了,只保留分类之间的分割线。全新的设置菜单还提供了一个绿色的顶栏,允许用户通过后方的下拉箭头,快速设定勿扰模式等。除了勿扰模式外,顶栏菜单还可以显示诸多其他的设置状态,例如数据流量的使用情况,自动亮度是否开启等。谷歌也在安卓7.0的设置中加入了汉堡菜单,在二级设置界面中的左上角,你就会看到这个汉堡菜单,点击后即可看到所有设置项,方便用户快速跳转。
改进的Doze休眠机制
谷歌在Android7.0中对Doze休眠机制做了进一步的优化,在此前的Android6.0中,Doze深度休眠机制对于改善安卓的续航提供了巨大的作用。而在Android67.0中,谷歌对Doze进行了更多的优化,休眠机制的使用规则和场景有所扩展,例如只要手动在后台删掉应用卡片,关屏后该应用就会被很快深度休眠。
系统级电话黑名单功能
Android7.0将电话拦截功能变成了一个系统级功能。其它应用可以调用这个拦截名单,但只有个别应用可以写入,包括拨号应用、默认的短信应用等。被拦截号码将不会出现在来电记录中,也不会出现通知。另外用户也可以通过账户体系备份和恢复这个拦截名单,以便快速导入其它设备或账号。
菜单键快速应用切换
双击菜单键,就能自动切换到上一个应用。此外,如果你不停地点击菜单键的话,就会在所有应用中不间断地轮换,应用窗口会自动放大,顶部还会出现倒计时条,停止点击且倒计时结束后,当前应用会自动放大并返回到前台。
对于开发的影响
各个新版本的Android系统除了提供了诸多新特性和功能外,还对系统和API行为做出了各种变更。以下重点介绍您应该了解并在开发应用时加以考虑的一些主要变更。(其中某些变更与上面提到的新特性有重复的地方,姑且听之)
Android 5.0行为变更
API级别:21
1. Android Runtime(ART)
大多数 Android 应用无需任何更改就可以在 ART 下工作。不过,部分适合 Dalvik 的技术并不适用于 ART。如需了解有关最重要问题的信息,请参阅在 Android Runtime (ART) 上验证应用行为。如存在以下情况,应特别注意:
您的应用使用 Java 原生接口 (JNI) 运行 C/C++ 代码。
您使用生成非标准代码的开发工具(例如,一些代码混淆工具)。
您使用与压缩垃圾回收不兼容的技术