-
Notifications
You must be signed in to change notification settings - Fork 0
Google I O 2019
-
- 1.1 Bubbles
- 1.2 Sharing improvements
- 1.3 Dark theme
- 1.4 Notification actions
- 1.5 Gesture navigation
- 1.6 Playback capture
- 1.7 ANGLE
- 1.8 CameraX
- 1.9 ViewBindings
- 1.10 External Storage
- 1.11 Background Activity Starts
- 1.12 Camera & Connectivity
- 1.13 Settings Panel
- 1.14 Architecture Components
- 1.15 ViewPager2
- 1.16 App access to device location
气泡是 Android Q 中的一项新功能。借助气泡,用户可以轻松地在设备上的任何位置进行多任务处理。气泡内置于“通知”系统中。它们会浮动在其他应用内容上层,并会跟随用户转到任意位置。气泡可以展开以显示应用功能和信息,并可在不使用时折叠起来。
当设备处于已锁定状态或“显示屏始终保持开启状态”处于活动状态时,气泡就会像往常的通知那样显示。
气泡是一种可以选择停用的功能。在应用显示其第一个气泡时,系统会显示一个权限对话框,其中提供两个选项:
- 屏蔽来自您的应用的所有气泡 - 通知不会被屏蔽,但永远不会显示为气泡
- 允许来自您的应用的所有气泡 - 通过 BubbleMetaData 发送的所有通知都会显示为气泡
最佳做法
- 气泡会占用屏幕空间并遮盖其他应用内容。仅当非常需要显示气泡(例如进行中的通信)或用户明确要求为某些内容显示气泡时,才将通知发送为气泡。
- 请注意,用户可以停用气泡。在这种情况下,气泡通知会显示为一般通知。您应该始终确保您的气泡通知也可以作为一般通知使用。
- 从气泡启动的进程(例如 Activity 和对话框)会显示在气泡容器中。这意味着气泡可以有任务堆栈。如果您的气泡中有很多功能或导航,情况就会变得很复杂。我们建议您尽量让功能保持具体且不复杂。
在Android Q 中将 Direct Share API 替换为新的 Sharing Shortcuts API。现有的“直接共享”机制将继续有效,但优先级低于所有使用新版 API 的应用。
Sharing Shortcuts API 允许应用提前发布直接共享目标,而不是被动地按需检索结果。这就是 ShortcutManager 的工作原理。由于这两个 API 类似,因此我们扩展了 ShortcutInfo API 以让这两个功能更易于使用。借助新版 API,您可以直接将类别或人员分配到共享目标。在同一应用更新共享目标或此应用被卸载之前,这些共享目标会一直保留在系统中
示例代码:SharingShortcuts
Sharing Improvement的具体使用以及常见的问题解答
原文链接(https://developer.android.com/preview/features/darktheme)
Android Q提供了一个新的Dark主题,适用于Android系统UI和设备上运行的应用程序。
Dark theme有很多好处:
- 可以大幅减少用电量(取决于设备的屏幕技术)。
- 提高低视力用户和对强光敏感的用户的可视性。
- 使任何人都可以在光线不足的环境中使用设备。
在Android Q中,有三种方法可以启用Dark主题:
- 新的系统设置(设置 - >显示 - >主题)允许用户启用Dark主题。
- 新的Quick Settings tile允许用户从通知托盘中快速切换主题(一旦启用Quick Settings)。
- 在Pixel设备上,Battery Saver模式还可以同时启用Dark主题。 其他OEM可能支持也可能不支持此行为。
Supporting Dark theme in your app
In order to support Dark theme, you must set your app's theme (usually found in res/values/styles.xml) to inherit from a DayNight theme:
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
You can also use MaterialComponents' dark theming:
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
这将应用程序的主题与系统控制的夜间模式联系起来,并为应用程序提供默认的Dark主题(启用时)。
注意的点:
您的主题和样式应避免使用硬编码颜色或旨在在Light theme主题下使用的图标。 您应该使用主题属性(首选)或夜间限定资源。
以下是要了解的两个最重要的主题属性:
- ?android:attr / textColorPrimary这是一种通用的文本颜色。 它在Light主题中接近黑色,在Dark主题上接近白色。 包含一个disable状态。
- ?attr / colorControlNormal通用图标颜色。 包含一个disable状态。
建议使用Material Design Components,因为它的颜色主题系统(例如主题属性?attr / colorSurface和?attr / colorOnSurface)可以轻松访问合适的颜色。 当然,您可以在主题中自定义这些属性。
Force Dark
Android Q提供Force Dark,这是开发人员快速实现Dark主题的功能,无需明确设置DayNight主题。
Force Dark分析以Light theme为主题的应用程序的每个View,并在绘制到屏幕之前自动应用Dark主题。 通过使用 Force Dark可以减少开发在实现Dark主题所需的时间。
应用必须通过在应用主题中设置android:forceDarkAllowed =“true”来使用Force Dark。 此属性设置在所有系统和AndroidX提供的Light theme主题上,例如Theme.Material.Light。 当您使用Force Dark时,您应该确保彻底测试您的应用并根据需要排除一些view。
如果您的应用使用dark theme(例如Theme.Material),则Fore Dark不会生效。 同样,如果您的应用主题继承自DayNight主题,也不会应用Force Dark。
Disabling Force Dark on a view
Force Dark can be controlled on specific views with the android:forceDarkAllowed layout attribute or with setForceDarkAllowed()
.
Android Q引入了完全手势系统导航的选项。 应用开发者应该为准备此功能做两件事:
Android Q 包含一个新的 AudioPlaybackCapture API。应用可以借助此 API 复制其他应用正在播放的音频。该功能类似于屏幕采集,但针对的是音频。主要用例是影音在线播放应用,这些应用希望捕获游戏当前播放的音频。
关于捕获音频的具体使用,见https://developer.android.com/preview/features/playback-capture
Android设备上的不同硬件供应商提供了许多OpenGL ES驱动程序。这会导致这些驱动程序的行为不一致。这也意味着错误修复通常不会传播到所有设备,并有助于导致OpenGL ES生态系统的碎片化。
随着Android Q的发布,Android开发人员和合作伙伴可以选择使用ANGLE运行,这是Chrome组织中的一个项目,它将ES层叠在Vulkan之上,而不是使用供应商提供的ES驱动程序。
当ANGLE可用时,开发人员和OEM可以决定特定应用程序是否应该使用ANGLE。由于完整的OpenGL驱动程序需要时间,因此Android Q引入了一个选择加入选项,让开发人员可以逐步进行转换。 ANGLE将随着时间的推移而更新,引入更多OpenGL功能,错误修复和性能优化。 Android Q引入了两项新功能,可帮助您根据每个应用评估和选择ANGLE:
为了在开发人员级别评估ANGLE,Android Q包含一个开发人员选项设置,允许开发人员指定非核心应用程序应该与ANGLE一起运行。
当Android Q发布时,ANGLE APK将包含一个配置文件,指示哪些应用程序应该或不应该使用ANGLE。
更多详情见:https://developer.android.com/preview/privacy/scoped-storage
Android Q限制了应用何时可以start activities。 此行为更改有助于最大限度地减少用户的中断,并使用户更好地控制屏幕上显示的内容。
此行为更改适用于在Android Q上运行的所有应用,甚至是针对Android 9(API级别28)或更低级别的应用。 此外,即使您的应用面向Android 9或更低版本且最初安装在运行Android 9或更低版本的设备上,在设备升级到Android Q后,行为更改仍会生效。
实际上,大多数应用程序都不受此更改的影响。
更多详情见:https://developer.android.com/preview/privacy/background-activity-starts
Changes affecting all apps
The following change affects all apps running on Android Q, even if they target Android 9 (API level 28) or lower.
访问所有camera信息需要请求权限
Android Q更改了默认情况下getCameraCharacteristics()方法返回的信息。 特别是,您的应用必须具有CAMERA权限才能访问此方法的返回值中包含的潜在设备特定元数据。
如果您的应用没有CAMERA权限,则无法访问以下信息:
- ANDROID_LENS_POSE_ROTATION
- ANDROID_LENS_POSE_TRANSLATION
- ANDROID_LENS_INTRINSIC_CALIBRATION
- ANDROID_LENS_RADIAL_DISTORTION
- ANDROID_LENS_POSE_REFERENCE
- ANDROID_LENS_DISTORTION
- ANDROID_LENS_INFO_HYPERFOCAL_DISTANCE
- ANDROID_LENS_INFO_MINIMUM_FOCUS_DISTANCE
- ANDROID_SENSOR_REFERENCE_ILLUMINANT1
- ANDROID_SENSOR_REFERENCE_ILLUMINANT2
- ANDROID_SENSOR_CALIBRATION_TRANSFORM1
- ANDROID_SENSOR_CALIBRATION_TRANSFORM2
- ANDROID_SENSOR_COLOR_TRANSFORM1
- ANDROID_SENSOR_COLOR_TRANSFORM2
- ANDROID_SENSOR_FORWARD_MATRIX1
- ANDROID_SENSOR_FORWARD_MATRIX2
Changes affecting apps targeting Android Q
The following changes affect apps only if they target Android Q.
启用和禁用Wi-Fi的限制
针对Android Q的应用无法启用或停用Wi-Fi。 WifiManager.setWifiEnabled()方法始终返回false。
如果需要,请使用Settings Panel提示用户启用和禁用Wi-Fi。
更多详情见:https://developer.android.com/preview/privacy/camera-connectivity
Android Q让用户可以更好地控制应用何时可以访问设备位置。 当在Android Q上运行的应用程序请求位置访问时,用户会看到如下图所示的对话框。此对话框允许用户授予对两个不同范围的位置访问权限:使用应用期间(仅限前台)或任何时候(前台和后台)。
为了支持用户对应用访问位置信息的额外控制,Android Q引入了新的位置权限ACCESS_BACKGROUND_LOCATION。 与现有的ACCESS_FINE_LOCATION和ACCESS_COARSE_LOCATION权限不同,新权限仅影响应用在后台运行时对位置的访问权限。
更多详情见:https://developer.android.com/preview/privacy/device-location
Exception Dashboard
如果打开了Data Sharing, 当Android Studio抛出异常时,会自动将异常上传到AndroidStudio官方Server, 在Exception Dashboard上可以看到具体信息, 这有助于他们解决Bug, 改善Android Studio.
UI Freezes Dashboard
如果Android Studio UI线程在几秒钟无响应,则会自动抓取整个线程dump信息,并传到Server, 在UI Freezes Dashboard上可以看到具体信息.
Regression infrastructure
OutOfMemoryException Dashboard
当IDE发生OOM的时候,会自动将信息同步到Server,并在OutOfMemoryException Dashboard上可以看到具体信息
Android Studio 3.5会自动检测系统可用RAM以及项目Size, 并会提示建议,如下图所示
还可以直接到设置里面去设置
2.1.3 Capturing Android Studio heap dump
如果Android Studio耗尽内存或几乎内存不足,会自动抓取堆存储信息并生成文件,存放在你的机子上。
然后在下次启动Android Studio的时候,会生成Memory Use Report并删除存储在本地的文件,并会有一个弹框提醒(如下图所示),用户可以点击查看Report详情,并可以选择发送给Server
2.1.5 Performance impact of Virus Checker
AndroidStudio 3.5预览版推出了一个新功能——ApplyChange,替换原来的InstantRun功能。ApplyChange采用了跟InstantRun不一样的原理来加快AndroidStudio的部署安装apk的流程。和InstantRun不同的是,它不会在构建过程中去修改apk。它依赖的是安卓8.0开始虚拟机支持的特殊指令来进行类的替换。
当连接上安卓8.0及以上的设备时,as将会多出两个按钮
- ApplyChanges部署资源和代码改动到手机,重启activity,但是无需重启应用。
- 仅部署代码改动到手机,不需要重启activity和应用。
ApplyChanges的核心是要找出AndroidStudio构建出来的apk和已经安装到手机设备apk的差异。找出差异后,然后将差异发送到手机上执行差异合并。
使用Gradle构建,会在home目录下缓存项目所有相关的jar文件, 在Gralde 4.10版本上新增了一个自动清除缓存的功能(如下图所示),如果一个library在7天到30天内没有被gradle使用到那么其缓存就会被自动清除。但是为了性能,在重启studio的时候并不会进行真实的Gradle构建,而是加载上次cache的同步状态,如果缓存被清除了,就会出现上图所示的各种报红的情况。这种情况下,只要rebuild就行了。
Android Studio3.5支持在官网直接下载Android Gradle Plugin和Google Maven dependencies,下载完后直接在home目录下解压,然后将下图中显示的脚本放到gradle的初始化文件夹里.
如果你是在android studio3.1上创建的项目,然后在android studio3.3上打开,就会出现如图所示的警告信息,为了良好的体验,在3.5版本上不再显示这些警告信息。
在Android Studio3.5上解决了一些关于Data Binding已知的一些问题,为了更好的使用Data Bing,建议使用Android Studio3.5版本。
以前伴随着AndroidStudio的更新,gradle版本也需要更新,但是gradle版本一更新,旧项目就开始不适应了,编译上出现一堆问题(尤其是以前AS2.0时代),从AS3.5版本开始,AS的更新与gradle的更新独立开来,不会出现伴随着AS的更新,gralde也需要更新的问题.
以下几个都是在AndroidStudio3.4上新增的功能
dependencies面板(下图中所示),列出了当前模块依赖的第三方库.
dependencies面板中最关键的一个地方就是依赖库的查找
通过dependencies里面的+按钮,再选中Library Dependency就可以打开搜索页面了,可以搜Maven,JCenter等远程的仓库,也可以搜索本地的,大大减少了添加依赖时找包的问题.
但是也有一个需要注意的地方,如上图中search框上方提到的,查找的第三方库都是根据我们projects项目的build.gradle中的repositories中配置的仓库控制。例如google,jcenter,Maven那些。
对当前项目模块构建的信息做一个提示建议,最直观的就是依赖的升级
Resource Manager(资源管理器)是AndroidStudio3.4引入的,默认会在左边的侧边栏找到,或者通过View->Tool Windows->Resource Manager找到.
ResourceManager有哪些优势:
- 可以直观得查看图片,布局,颜色.以前看具体图片以及布局都需要一个个点进去看,非常麻烦. 打开Resource Manager后如下图所示
- 导入图片的时候还能提醒图片命名错误
3. 可直接从Resource Manger里将图片拖到布局里,如果拖到的地方是一个空白的地方,就会自动生成一个ImageView,如果拖到布局里已有的ImageView地方,就会自动替换该ImageView引用的图片
MotionLayout是ConstraintLayout的子类,它作为连接布局过度和复杂的手势操作之间的桥梁而生。 可以把它当做介于属性动画框架、TransitionManager 和 CoordinatorLayout 之间的功能集合。
与通常的布局不同,MotionLayout所做的约束保存在一个单独的XML文件MotionScene中,该文件存储在您的res/xml目录中。MotionScene文件可以包含指定动画所需的全部内容.
关于MotionLayout的使用,可以参考
- https://blog.csdn.net/u013762572/article/details/90288716
- https://www.jianshu.com/p/5203cf11d943
- https://github.com/googlesamples/android-ConstraintLayoutExamples
首先看下Android Gradle Plugin的多线程模式
- 子模块可以并行构建
- 一些任务通过JDK的executor service来分配工作量
- 单个模块的多个任务只能按顺序运行
从第三点就能看出来单个模块多个任务不能并行运行,这样明显影响build的效率。因此引入了Workers. Workers能够使单个模块的多个任务并行运行,提高build的效率
上图中分别为TaskB和TaskC创建了一个worker, 两个任务可并行运行,TaskC无需等待TaskB运行完成
使能workers
- 与Gradle合作以获得更快的transform APIs
- 通过更好的调度改进并行化
- 启用预先dexded库的缓存
以下是Artifact Transforms和没有Artifact Transforms的区别,有Artifact Transforms的情况下,clean build速度提高了15%
![Artifact Transforms3] (https://github.com/shewenbiao/MyArsenal/blob/master/google_io_2019_img/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202019-06-26%20%E4%B8%8A%E5%8D%882.37.33.png)
为了在内部测量构建速度,使用一组基准测试,如下图所示
以下是测试的数据对比
Code Change
Resource Change
Spotify(incremental)
Spotify(cached)
Gradle Scan: It will give you information about why the tasks run, what were the dependencies.(它将为您提供有关任务运行原因,依赖项的信息。)
Gradle Profiler: It will give you information about why your task ran and all that kind of stuff.(它将为您提供有关您的任务运行原因和所有类型的信息。)
How to enable Chrome trace