一、Android L 后 ART替换dalvik
Dalvik是Google公司自己设计用于Android平台的虚拟机。
 Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。
 它可以支持已转换为** .dex格式**的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。
 Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。
即Android Runtime
 ART 的机制与 Dalvik 不同。在Dalvik下,应用每次运行的时候,字节码都需要通过即时编译器(just in time ,JIT)转换为机器码,这会拖慢应用的运行效率,而在ART 环境中,应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用。这个过程叫做预编译(AOT,Ahead-Of-Time)。这样的话,应用的启动(首次)和执行都会变得更加快速。
ART有什么优缺点呢?
优点:
 1、系统性能的显著提升。
 2、应用启动更快、运行更快、体验更流畅、触感反馈更及时。
 3、更长的电池续航能力。
 4、支持更低的硬件。
缺点:
 1.机器码占用的存储空间更大,字节码变为机器码之后,可能会增加10%-20%(不过在应用包中,可执行的代码常常只是一部分。比如最新的 Google+ APK 是 28.3 MB,但是代码只有 6.9 MB。)
 2.应用的安装时间会变长。
tips:现在智能手机大部分都可以让用户选择使用Dalvik还是ART模式。当然默认还是使用Dalvik模式。
用法:设置-辅助功能-开发者选项(开发人员工具)-选择运行环境(不同的手机设置的步骤可能不一样)
Android 各个版本适配:
https://www.jianshu.com/p/bac6cbedf0d3
5.0 (API 21)新特性—2014年(Lollipop)
- 全新的Material Design设计风格。
- 支持64位ART虚拟机。 - 放弃了之前一直使用的Dalvik虚拟机,改用了ART虚拟机,实现了真正的跨平台编译。(todo:弄懂为何) - https://www.cnblogs.com/ganchuanpu/p/9321682.html
 
 
- 放弃了之前一直使用的Dalvik虚拟机,改用了ART虚拟机,实现了真正的跨平台编译。(todo:弄懂为何) 
- 引入RecyclerView(todo:它的优点)。 - Android ListView与RecyclerView对比浅析
 
- 新增悬挂式Notification。 - 相较于普通式和折叠式Notification需要拉下通知中心才可以查看的交互,悬挂式直接显示在屏幕上方,并且焦点不变,仍然在用户操作的界面上,不会打断用户的操作,过几秒会消失。
- Android 5.0 支持对Notification设置显示等级的能力。通知黑白图标
 
- 引入更加灵活的Toolbar,取代ActionBar
6.0 (API 23) 新特性—2015年(Marshmallow)
-  统一支付标准Android Pay。 
-  指纹支持。 
-  Doze电量管理。 - 手机静止不动一段时间后,会进入Doze电量管理模式,提高续航时间。
 
-  APP Links。 - 加强了软件间的关联,支持点击链接跳转到对应的App(todo:scheme调起???)
 
-  Now on Tap - 长按Home键激活Now on Tap,他会识别当前屏幕上的内容并创建Now卡片。
 
-  【重点】运行时权限管理。 -  targetSdkVersion >= 23。 
-  分位Normal Permissions和Dangerous Permissions。 
-  ActivityCompat.checkSelfPermissions()请求,低于6.0的版本,次方法默认返回值为PackManager.PERMISSION_GRANTED。 
-  onRequestPermissionsResult()回调结果。 
-  如果用户选择了『不在询问』,下次则不会弹框,而是直接处理拒绝后的逻辑。 
 
-  
-  取消支持 Apache HTTP 客户端 
7.0 (API 24)新特性—2016年(Nougat)
- 多窗口模式(分屏模式) - 进入多窗口的Activity生命周期变化,会先onDestroy销毁,随后重建,停在onPause状态。
- 推出多窗口的Activity生命周期变化,接着上面onPause->onDestroy,随后正常重建。
- 禁用多窗口模式:在manifest.xml中配置android:resizeableActivity="false"
 
- Data Server - 一种流量保护机制,启用Data Server后,系统将拦截后台应用的数据使用。
 
- 改进的Java8语言支持。 - 支持java8,可以使用lambda表达式等。
 
- 自定义壁纸 - 设置壁纸时,可以选择是设置桌面还是锁屏壁纸。
 
- 快捷回复 - 在通知中快捷回复。
 
- 快速设置 - 下拉通知栏顶部,有edit按钮,可以对菜单进行自定义添加、删除、拖动排序。
 
- 其它:Daydream VR、后台省点、Unicode 9支持和全新的emoji表情符号、Google Assistant。
- FileProvider,7.0 的通知栏,改变了样式,增加了小图标,还可以显示通知数
8.0 (API 26) 新特性—2017年(Oreo)
- 【重点】通知中心 - 所有通知都必须分到一个渠道,即新增NotificationChannel。
 
- 画中画(PIP)支持 - 一种特殊的多窗口模式,常用于视频播放。
 
- 自适应启动器图标 - 桌面icon在不同的设备型号上显示为不同的形状。
 
- 后台执行限制 - 后台service限制。
- 广播限制:除了有限的例外情况,应用无法使用清单注册隐式广播。
 
- 后台位置信息限制 - 为降低耗电量,后台应用检索用户当前位置信息的频率会得到限制。
 
- 其它:自动填充框架、自动调整TextView的大小、WebView API、多显示器支持
- 通知分渠道
9.0 (API 28) 新特性—2018年(Pie)
- 全面支持全面屏 - 通过DisplayCutout类可以确定非功能区域的位置和形状,这些区域不应显示内容。
 
- 动画 - 引入AnimatedImageDrawable类,用于显示GIF和WebP动画图像。
 
- 利用Wi-Fi RTT进行室内定位。
- 隐私变更 - 限制后台访问设备传感器,限制通过WiFi扫描检索到的信息等。
 
- 其它:机器学习,HDR VP9视频、HEIF图像压缩和Media API、对使用非SDK接口的限制。
- 刘海屏幕,强制https请求
10.0 (API 29) 新特性—2019年(Q)
- 5G支持。
- 支持可折叠设备。
- 【重点】暗黑主题。
- 手势导航。 - 全面屏手势操作。
 
- 智能回复。 - 通过机器学习预测你在回复消息时可能会说些什么。
 
- 用户隐私。给用户更多应用程序控制权。 - 提供仅这一次、应用使用时授权等选择。
 
- ART优化, - 添加了一种垃圾回收机制,节省垃圾回收的时间,帮助在低版本设备上顺畅运行。
 
- 机器学习更新。
- 夜间模式,存储 分区
11.0 (API 30)新特性—2020年(R)
- 短信 更新进,提供更加友好的交互。
- 权限和隐私 - 在Android10的用户隐私基础上,新增了位置、麦克风和摄像头的一次性权限许可。
 
- 内置屏幕录制。
- 适配不同设备。 - 折叠屏支持优化,增加铰链角度传感器API等。
- 高刷新率支持。
 
- 网络优化。 - 新增『动态计量API』,如果检测到连接到无限5G信号,将可以访问最高质量的视频和图片。
 
- 强制执行存储分区
12.0 (API 31)新特性—2021年(S)
- 原生的ImageDecoder支持GIF和WebP格式。
- 支持圆角。 - Display.getRounderCorner()获取屏幕圆角的详细信息。
 
- 更易用的模糊、色彩滤镜等特效。 - View.setRenderEffect(RenderEffect)将特效直接应用于视图
 
- 限制对MAC地址的访问。
- 应用覆盖控制。 - 可以控制是否允许在自己的内容上显示这些覆盖图层,调用Window#setHideOverlayWindows(),表明不允许TYPE_APPLICATION_OVERLAY的窗口显示。
 
- 可以控制是否允许在自己的内容上显示这些覆盖图层,调用
- 应用无法关闭系统对话框。 - 弃用了 ACTION_CLOSE_SYSTEM_DIALOGSintent 操作。
 
- 弃用了 
- Activity/BroadcastReciver/Service 声明了Filter,则必须显示设置android:exported属性。
- 必须为每个PendingIntent设置可变性。
- 后台应用无法再启动前台服务。
- 请求精确位置,需同时申请 ACCESS_FINE_LOCATION和ACCESS_COARSE_LOCATION权限
13.0 (API 33)新特性—2022年(T)
- 细分媒体权限:将 READ_EXTERNAL_STORAGE 细分为IAMGES、VIDEO、AUDIO权限(若设置 targetSdk>=33 则此项必需适配!)
- WebView调整:废弃setAppCacheEnabled与setForceDark方法;
 (若设置 targetSdk>=33 则此项必需适配!)
- 静态广播注册:注册静态广播时,需设置对其他应用的可见性
 (若设置 targetSdk>=33 则此项必需适配!)
- 通知权限:新增运行时通知权限:POST_NOTIFICATIONS
 (若设置 targetSdk>=33 则此项必需适配!)
- Wi-Fi :新增 NEARBY_WIFI_DEVICES 运行时权限
 (若设置 targetSdk>=33 则此项必需适配!)
- 身体传感器后台权限:新增 BODY_SENSORS_BACKGROUND 运行时权限
 (若设置 targetSdk>=33 则此项必需适配!)
- 剪切板内容隐藏:新增内容隐藏API
 (根据业务需求,选择性适配!)
- 非 SDK 接口的限制
 (若设置 targetSdk>=33 则此项必需适配!
14.0 (API 33)新特性—2022年(T)
-  进程只能杀死自己的后台进程说明:从Android 14开始,当应用调用 killBackgroundProcesses() 时,该API只能杀死应用自己的后台进程。如果传入其他应用的包名,该方法对其他应用的后台进程没有影响。 
-  前台服务类型是必填项说明:Android 14 为目标平台,则必须指定适当的前台服务类型。与以前的 Android 版本一样,可组合使用多个类型。 Android 14(U)适配攻略 - 简书