自嘲时刻
Android P正式版(以下称为Pie)已经正式上线了,各大厂商已经开始了系统升级工作,咱做上层开发的也得跟上节奏。当然了,新版本所有的行为更改内容都可以在官网上找到,对于其中如何绕开非SDK接口限制的问题,也有各路大神给出了解决方案。所以,我只能当搬运工了(偷笑ing)。下面我会结合现有的开发经验,聊聊Pie中对我们开发影响较大的一些更新,重头戏还是适配齐刘海和非SDK接口限制。
行为变更
这里只会列出部分行为变更(仅代表个人见解),感兴趣的同学直接去官网查看。
通知渠道设置更新
更新内容:
- 屏蔽渠道组:现在,用户可以针对某个应用在通知设置中屏蔽整个渠道组。 您可以使用 isBlocked() 函数确定何时屏蔽一个渠道组,从而不会向该组中的渠道发送任何通知。
- 全新的广播 Intent 类型:现在,当通知渠道和渠道组的屏蔽状态发生变更时,Android 系统将发送广播 Intent。 拥有已屏蔽的渠道或渠道组的应用可以侦听这些 Intent 并做出相应的回应。
影响:APP的推送功能可能需要适配,Pie中可以知道渠道组的状态了。
ImageDecoder & AnimatedImageDrawable
更新内容:
- ImageDecoder 类,可提供现代化的图像解码方法。 使用该类取代 BitmapFactory 和 BitmapFactory.Options API。ImageDecoder 让您可通过字节缓冲区、文件或 URI 来创建 Drawable 或 Bitmap。
- AnimatedImageDrawable 类,用于绘制和显示 GIF 和 WebP 动画图像。 AnimatedImageDrawable 的工作方式与 AnimatedVectorDrawable 的相似之处在于,都是渲染线程驱动 AnimatedImageDrawable 的动画。
影响:对APP级别的影响应该较小,毕竟大部分都是使用第三方库来实现图片资源的加载。可能对SDK影响较大,SDK里基本都是自己写Image压缩解码逻辑,所以可以考虑使用。
统一生物识别身份验证对话框
更新内容:
在 Android 9 中,系统代表您的应用提供生物识别身份验证对话框。 该功能可创建标准化的对话框外观、风格和位置,让用户更加确信,他们在使用可信的生物识别凭据检查程序进行身份验证。
影响:接入了生物识别功能的(如:指纹)APP就有统一的提示对话框了,挺好的。就是不知道标准的风格是否适合各种应用。
屏幕旋转
更新内容:
- 为避免无意的旋转,我们新增了一种模式,哪怕设备位置发生变化,也会固定在当前屏幕方向上。 必要时用户可以通过按系统栏上的一个按钮手动触发旋转。
- 从 Android 9 开始,对纵向旋转模式做出了重大变更。纵向模式已重命名为旋转锁定,它会在自动屏幕旋转关闭时启用。当设备处于旋转锁定模式时,用户可将其屏幕锁定到顶层可见 Activity 所支持的任何旋转。 Activity 不应假定它将始终以纵向呈现。
影响:用户可以在关闭自动旋转的情况下,手动旋转屏幕;能否旋转取决于顶层可见Activity所支持的旋转设置。
文本
更新内容:
- 文本预先计算:PrecomputedText 类使您能提前计算和缓存所需信息,改善了文本渲染性能。
- 放大器:Magnifier 类是一种可提供放大器API的微件,可在所有应用中实现一致的放大器功能体验。
- Smart Linkify:Android 9增强了TextClassifier类,该类可利用机器学习在选定文本中识别一些实体并建议采取相应的操作。
- 文本布局:借助几种便捷函数和属性,可以更轻松地实现界面设计。
影响:这个无疑强化了TextView的能力,应该比现在设置TextVie的样式方便。
电源管理
更新内容:
- 新增了一个
应用待机群组
的概念,系统将根据用户的使用模式限制应用对 CPU 或电池等设备资源的访问。
五个群组如下:
- 活跃
如果用户当前正在使用应用,应用将被归到“活跃”群组中。
如果应用处于“活跃”群组,系统不会对应用的作业、报警或 FCM 消息施加任何限制。 - 工作集
如果应用经常运行,但当前未处于活跃状态,它将被归到“工作集”群组中。
如果应用处于“工作集”群组,系统会对它运行作业和触发报警的能力施加轻度限制。 - 常用
如果应用会定期使用,但不是每天都必须使用,它将被归到“常用”群组中。
如果应用处于“常用”群组,系统将对它运行作业和触发报警的能力施加较强的限制,也会对高优先级 FCM 消息的数量设定限制。 - 极少使用
如果应用不经常使用,那么它属于“极少使用”群组。
如果应用处于“极少使用”群组,系统将对它运行作业、触发警报和接收高优先级FCM消息的能力施加严格限制。系统还会限制应用连接到网络的能力。 - 从未使用
安装但是从未运行过的应用会被归到“从未使用”群组中。 系统会对这些应用施加极强的限制。
影响:无疑,Google在帮Android机省电、省资源,算是一个比较好的更新。但是,我相信厂商会对分组策略稍作修改(或者白名单啥的),以方便自身应用可以随时唤起。总的来说,应该对应用的Push类功能影响较大。
权限变更
更新内容:
- 构建序列号弃用:在 Android 9 中,Build.SERIAL 始终设置为 “UNKNOWN” 以保护用户的隐私。
如果您的应用需要访问设备的硬件序列号,您应改为请求 READ_PHONE_STATE 权限,然后调用 getSerial()。 - 前台服务:针对 Android 9 或更高版本并使用前台服务的应用必须请求 FOREGROUND_SERVICE 权限。
- 后台对传感器的访问受限:Android 9限制后台应用访问用户输入和传感器数据的能力。
- 限制访问通话记录:Android 9 引入 CALL_LOG 权限组并将 READ_CALL_LOG、WRITE_CALL_LOG 和 PROCESS_OUTGOING_CALLS 权限移入该组。
- 限制访问电话号码:在未首先获得 READ_CALL_LOG 权限的情况下,除了应用的用例需要的其他权限之外,运行于 Android 9 上的应用无法读取电话号码或手机状态。
- 限制访问 Wi-Fi 位置和连接信息:在 Android 9 中,应用进行 Wi-Fi 扫描的权限要求比之前的版本更严格。具体限制见官网。
影响:权限变更对收集手机应用信息和监听应用WiFi状态(主要是位置信息)都有很大影响,特别是对这些信息有依赖的业务。
Apache Http被弃用
更新内容:
从 Android 9 开始,默认情况下Apache网络库已从 bootclasspath 中移除且不可用于应用。
影响:终于要彻底抛弃Apache库了,但业务硬要用的话,还是可以自己导入jar包或者在AndroidManifest.xml中使用uses-library标签。