爱笑的姑娘|拖不得了,Android11真的要来了,最全适配实践指南奉上( 九 )


比如queryAndAggregateUsageStats方法 , 可以获取指定时间区间内使用统计数据 , 以应用包名为键值进行数据合并 。
但是在Android 11 设备中 , 不好意思 , 不能随意使用这些信息了 。 只有当isUserUnlocked()方法返回true的时候 , 才能正常访问这些数据 。 也就是以下两种情况:

  • 用户在系统启动后首次解锁其设备
  • 用户在设备上切换到自己的帐号

JobScheduler API 调用限制调试
JobScheduler任务调度器 , 可以在设备空闲时做一些任务处理 。 Android11中如果你设置为debug模式(debuggable 清单属性设置为 true) , 超出速率限制的JobScheduler API调用将返回 RESULT_FAILURE 。 这个有什么用呢?应该可以帮助我们发现一些性能问题 , 感兴趣的可以自己试试 。
顺便提下 , Jetpack组件WorkManager也是用到了JobScheduler , 不熟悉的同学可以去了解下 , JobScheduler是由SystemServer进程启动的一个系统服务 , 所以才可以有这么大的权限 。
无障碍操作
在以前的 Android 版本中 , 框架会向未正确处理基于点击的无障碍操作的微件分派触摸事件 。 通常 , 这些视图会直接处理触摸事件 , 而不是注册点击监听器 。为了在正确定义无障碍操作的应用中创建更一致的行为 , Android 11 绝不会分派触摸事件 。 相反 , 系统会完全依赖于基于点击的无障碍操作:ACTION_CLICK 和 ACTION_LONG_CLICK 。 此更改会影响屏幕阅读器的行为 。
在Android手机上有个预安装的屏幕阅读服务 , 叫做TalkBack , 为视力障碍人士或者视力状态不佳的老年人提供 。 那我们应用为了让这个阅读器能够读懂你的自定义view操作 , 必须给与自定义控件定义处理程序 , 包括点击 , 长按等操作 。 原来版本可能对于OnTouchListener也支持无障碍触摸事件 , 而在Android11中 , 必须专门制定点击或者长按事件才行了 。 给个:
class TriSwitch(context: Context) : Switch(context) {// 0, 1, or 2.var currentState: Int = 0private setinit {updateAccessibilityActions()}private fun updateAccessibilityActions() {ViewCompat.replaceAccessibilityAction(this, ACTION_CLICK,action-label) {view, args -> moveToNextState()})}private fun moveToNextState() {currentState = (currentState + 1) % 3}}一个自定义控件TriSwitch , 继承自Switch , 由于和Switch的点击效果不一样 , 所以必须通过替换 ViewCompat.replaceAccessibilityAction() 来重新定义相应的无障碍操作 。
非SDK接口限制
Android 11 包含更新后的受限制非 SDK 接口列表(基于与 Android 开发者之间的协作以及最新的内部测试) 。 在限制使用非 SDK 接口之前 , 我们会尽可能确保提供公开替代方案 。
老样子 , Android11也会限制一些接口 , 包括灰名单和白名单 , 具体看非SDK接口列表
总结一路分析下来也可以看到 , 如果是重要的改动 , 特别是涉及到崩溃的改动还是放到了targetSdkVersion=30的内容中 , 这也是每次Android发版的一个潜规则吧 , 为了最大程度不影响已上线的app所作出的举动 。但是 , 这并不意味我们就可以不改 。 因为应用可拖不起 , 用户可拖不起 , 毕竟升级才能给到用户最好的体验 。 而且各大应用市场也都会建议或者强制应用升级targetSdkVersion , 以便适配最新的手机 。
所以 , 行动吧 。
附件官网改动介绍
这里我分享一份大佬收录整理的Android学习PDF+架构视频+面试文档+源码笔记 , 高级架构技术进阶脑图、Android开发面试专题资料 , 高级进阶架构资料
这些都是我现在闲暇还会反复翻阅的精品资料 。 里面对近几年的大厂面试高频知识点都有详细的讲解 。 相信可以有效的帮助大家掌握知识、理解原理 。