感谢大家关注 Android 开发者峰会 2019!在本次峰会内容连载期间我们收到了不少来自大家的 Android 开发问题,由于篇幅所限这里精选一部分具有代表性的问题做出解答。
本次开发者峰会全部演讲的中文字幕视频已经全部发布,覆盖到了目前 Android 应用和游戏开发领域的主要课题。欢迎您前往我们的官方网站或播放列表页面观看。
Android 开发者峰会 2019 官方网站
https://developer.android.google.cn/dev-summit-recap
Bilibili 播放列表
https://space.bilibili.com/64169458/channel/detail?cid=91608
Q 1: Jetpack Compose 会给 Android 应用的架构带来哪些变化?
A: Jetpack Compose 设计的初衷是尽可能不影响大家使用架构组件打造好的内容,并在 UI 方面确保帮助开发者们高效打造符合架构组件一贯高品质的体验。请查看开发者预览版本,欢迎通过 Github 提交您的反馈!
开发者预览版本
https://developer.android.google.cn/jetpack/compose
Github
https://github.com/android/compose-samples/tree/master/JetNews
Q 2: 有没有可能脱离其他 Jetpack 库单独使用 CameraX?
A: CameraX 目前依赖 Jetpack Lifecycle,但并没有依赖其他组件 (如 ViewModel 和 LiveData)。我们接下来会逐步在 CameraX 中引入更多针对 Jetpack 的兼容性功能。
Q 3: 接下来 Wear OS 会有怎样的进展?
A: Google 很重视 Wear OS 以及合作伙伴生态系统的发展,许多合作伙伴也在不久前发布了全新的秋季手表产品阵容。在软件方面,我们也在继续投入资源打造更好的用户体验,比如磁贴交互,以及使用滑动操作进入全屏信息界面。这次开发者峰会上我们没有面向开发者的新消息,但我们一直在思考如何为 Wear OS 带来更多的兼容性。请大家继续保持关注。
Q 4: Google 有没有一些展示 Kotlin 协程和 Android 架构组件的例子,比如使用 MVVM 模式?
A: 我们有不少这样的例子。比如在 Github 上就有好几个展示架构组件以及 LiveData 的例子,并且有提供 Codelab。这些例子也在我们的 Udacity 课程和文章中有展示。
GitHub 上的示例
https://github.com/android/architecture-components-samples/tree/master/LiveDataSample
将 Kotlin 协程与架构组件一起使用
https://developer.android.google.cn/topic/libraries/architecture/coroutines
Q 5: 我设置了一个 15 分钟运行一次的循环,其约束条件是需要可以访问网络。为什么在网络一直可用的情况下,第二次运行 1 小时也没有出现?
A: 在没有提供更多细节的情况下很难判断具体原因,可能是应用被设备强行结束,或者是约束条件由于某种原因并没有得到满足。
Q 6: 有没有办法修改 Android 模拟器默认的电话号码和国家码?
A: 目前没有办法修改。
Q 7: 请问 ViewPager2 的稳定版大概会在何时可用?
A: ViewPager2 的稳定版已在 2019 年 11 月上线啦!大家久等了。
https://developer.android.google.cn/jetpack/androidx/releases/viewpager2#1.0.0
Q 8: Kotlin 适合企业开发者来使用吗?
A: Kotlin 并不仅限于 Android 开发,事实上在后端、Web 乃至桌面上都有很丰富的用例和强大的支持。
Q 9: Android Studio 的速度有改善吗?
A: 有。我们通过 Project Marble 等诸多环节的努力进一步提升了 Android Studio 在性能和稳定性方面的表现,包括但不限于 UI 卡顿、内存消耗、增量注解处理速度等诸多指标。另外,我们也会针对开发者的开发环境和项目给出建议分配给 Studio 的内存大小,从而进一步改善其性能表现。
Q 10: 随着 Android Studio 的功能越来越复杂,有没有计划降低或者优化其内存需求?
A: 我们正在着手考虑这一点。
Q 11: 单一 Activity 或者多个 Activity,哪一种实现更优?
A: 我们建议开发者采用单一 Activity,这样能带来更好的用户体验。如果开发者打算提供深链接,也可以考虑多 Activity。
Q 12: 为什么 Android 每年会推出一个版本?会不会太快了?
A: 围绕我们的技术演进速度本就很快,更加上各种全新硬件的涌现、以及用户体验诉求的变迁,使得我们需要让 Android 平台和这些趋势保持同步。但我们也在努力确保开发者能有充裕的时间跟上平台演进的节奏,并会在尽可能早的时间点让开发者参与到平台演进的过程中来。
Q 13: Project Mainline 和 Project Treble 有什么区别?
A: 考虑到 FAQ 的篇幅,这里简要概述一下。Project Treble 可以认为是 Android OS 和底层的硬件之间的一条线,这条线的存在可以确保 Android 设备开发商能更快、更平顺地支持最新的 Android。而 Project Mainline 则可以理解为 Treble 上的一条条竖线,这些竖线组成了 OS,而通过 Project Mainline 我们可以做到在不发布完整 OS 的情况下更新操作系统组件。
Q 14: 我们何时可以在生产环境使用 CameraX?
A: CameraX 目前仍然在 Alpha 阶段。我们建议开发者在生产环境至少使用 Beta 版本的库,请大家关注 CameraX 的后续发布。
Q 15: 我现在在使用 Camera 1,我是该迁移至 Camera 2 还是 CameraX?我应该基于什么理由做出决策?
A: CameraX 的学习曲线比 Camera 2 更友好。但如果您打算实现更多自定义的或者完整的摄像头功能,Camera 2 会提供更多灵活性。另外,针对 API 19 或以前的用户,请使用 Camera 1,其他的用户请使用 CameraX,因为 CameraX 可以覆盖绝大多数用户。
Q 16: CameraX 如何处理多个摄像头的数据流?
A: 从 Android 9 开始我们引入了新的逻辑摄像头 API,它会将多个物理摄像头封装成一个逻辑摄像头供开发者使用。
Q 17: Compose 是否相比较 LiveData 数据绑定更优?
A: 这是达到同一个目的的两种做法,我们鼓励大家做出自己的尝试和选择。
Q 18: 我对 Compose 很感兴趣,我该从何学起?
A: 我们的开发者网站上开设了专区,请务必前往查看。
Jetpack Compose
https://developer.android.google.cn/jetpack/compose
Github 上的示例
https://github.com/android/compose-samples/tree/master/JetNews
Q 19: Jetpack Compose 支持使用约束布局来构建动态 UI 吗?
A: 我们正在努力加入对约束布局的支持。
Q 20: 在切换至深色模式时,是推荐使用深灰色背景还是纯黑色背景?
A: 深灰色背景可以在省电的同时做到在视觉上更加柔和,请开发者结合自己的应用视觉效果进行尝试。
Q 21: 在 Android 10 上如何获取用户的 IMEI?
A: 从 Android 10 开始,应用必须具有 READ_PRIVILEGED_PHONE_STATE 特许权限才能访问设备的不可重置标识符 (包含 IMEI 和序列号)。其实许多使用场景都不需要不可重置的设备标识符。例如,如果您的应用将不可重置的设备标识符用于广告跟踪或用户分析目的,请为这些特定使用场景使用 Android 广告 ID。要了解详情,请参阅唯一标识符的最佳做法。
唯一标识符最佳做法
https://developer.android.google.cn/training/articles/user-data-ids
再次感谢大家关注 Android 开发者峰会!
点击进入 Android Dev Summit 中文官方网站