一、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_DIALOGS
intent 操作。
- 弃用了
- 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)适配攻略 - 简书