文章微信公众号「AndroidTraveler」首发android
5 月 20 号参加了 Android Q Labs,所以本篇说一说会议的部份内容以及本身的一些想法。微信
会议主要是加深开发者对 Android Q 的了解,从而帮助开发者作好 Android Q 的兼容工做。app
所以本篇我会选择性说明一些在 Android Q 上你须要兼容的一些事情。工具
首先咱们说说为何要限制后台 Activity 的启动。布局
Android Q 以前的状况以下:
学习
考虑下面的几个场景:测试
假设在上面的几个场景中,忽然后台 Activity 弹出一个框,多是广告框,也多是抢占我界面的其余界面。优化
这个时候我以为心里是奔溃的,并且用户体验超级很差。视频
基于此,Android Q 里面引入了对后台 Activity 启动的限制。blog
注意关键的一个点是这个变化对全部在 Android Q 上运行的应用都会有影响。不管你的 targetSDK 版本。
因此若是你的 APP 存在这种场景的状况下,你就须要作一下额外处理了。
基本的处理方式是经过 Notification 弹一个通知,若是用户想点再点击进入你的 Activity。
那么如今有哪些 APP 会用到这种呢?举一个你们熟悉的。
这边测试了一下,微信语音通话是会直接从后台启动全屏覆盖的,因此可能微信须要针对这个行为变动作处理。
先看下 Q 以前的状况:
Q 的变化分两部分来讲明吧。
一部分是 MediaStore 的处理,另外一部分是分区存储的处理。
先说说 MediaStore,什么是 MediaStore 呢?
对于 MediaStore,Q 的处理以下:
能够看到对于 MediaStore,能够直接写,读的话仅仅限于本身写进去的文件。若是要查看其它应用提供的内容,须要获取读权限。
另外你会发现 MediaStore 上面只有媒体相关的,若是文件是非媒体类型呢?因此 Q 新增 MediaStore.Downloads,以下:
总结起来以下:
权限的变动:在没卸载的状况下,本身 APP 写或者读 MediaStore 媒体文件不须要权限。读其余的须要权限。卸载后读本身以前写入的也须要权限。
另外还有一个就是图片有一个位置信息,这个对用户来讲也是隐私,所以须要作额外处理。
说完了 MediaStore,接下来讲说分区存储。
总结起来就是分区存储模式下,不可以再直接访问 /sdcard 下的文件,而要经过 MediaStore 或者 SAF。固然本身 packagename 命名的目录下面仍是能够访问的。
另外目前能够经过在清单文件设置是否启用。能够设置 targetSDK 为 Q 的应用不启用,也能够设置 targetSDK 低于 Q 的启用。经过代码能够确认是否处于分区存储模式下。
推荐尽快完成适配,由于目前是为了给开发者更多时间适应这个变化,等到下一个版本 Android R 的时候会强制执行分区存储模式,到时候清单文件的设置也是没用的。所以强烈建议将这个工做排上兼容行程。固然在 Q 的兼容上能够根据自身业务进度进行设置,假设时间不够,能够暂时不启用,可是后续须要排期处理。
咱们看看 Android P 申请位置权限的对话框:
能够看到只有容许和拒绝两个选项。
如今看看 Android Q 的:
会发现多了一些选项,其中有一个仅在使用该应用时容许。
在 Android P 的时候,清单文件只须要申请一个权限:
而在 Q 上面,有两个,其中一个有 background 的。
之因此有两个,就是但愿尽可能少的获取权限,除非是你的 APP 真的有这个需求。在申请的时候也建议增量申请,什么意思呢?
首先第一步先获取位置权限:
在用户容许的状况下,若是 APP 须要,再进行增量权限请求:
推荐的位置权限最佳实践以下:
Q 支持深色主题,兼容有两种方式。
一种就是简单粗暴,适合时间少的。
一种就是推荐的,适合有足够时间的。
简单的方式若是是全局设置,只须要设置主题便可:
若是你须要对单个 View 作设置,也是能够的:
推荐的方式是使用 DayNight。
不过我在测试区启动深色主题时发现有点卡,估计后面系统还须要优化。
BubbleView 其实就是悬浮窗。指纹识别也是 Android Q 引入的一个官方方式。
这个不须要作兼容,算是新功能,这里不赘述。
其实在代码演示的时候,我注意到 PPT 上面的代码基本都是 Kotlin。
包括以前的 Kotlin-first 以及此次 Q & A 环节也有小伙伴提问到底 Google 主推 Kotlin 仍是 Flutter。
我这边说下个人见解吧。
我以为 Kotlin 和 Flutter 不冲突。
首先第一个 Kotlin 是一门语言,而 Flutter 是一个跨平台方案。
若是你的 APP 有跨平台的需求,或者有不少页面须要开发,人手不足,功能迭代比较频繁,那么你能够了解或者尝试使用 Flutter 来开发界面。一套代码,两端运行。尤为 Flutter 1.5 布局很广,涵盖了移动端、Web、桌面端和嵌入式。
对于 Android 开发者,能够看个人 Flutter 即学即用系列博客快速入门。
说完了 Flutter,说下 Kotlin 吧。
Kotlin 是一门语言,语言是干吗的?是实现咱们业务的工具。
假设如今 Java 和 Kotlin 均可以实现咱们的业务功能,而且官方都支持这两种语言,你有必要花不少时间去单独学习 Kotlin 吗?我以为没太大必要。
因此我以为对待 Kotlin 你能够了解一下,可以看懂 Kotlin 代码,会写简单的 Demo,我以为就够了。
固然若是你时间足够,想多学一门语言,彻底没问题。
以上是参加此次会议的一些简单总结和见解,更多内容经过下面的全程录像了解。
本次 Android Q Labs 全程录像能够经过连接观看:Android Q Labs