前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Now in Android | 11 月刊 · 2019

Now in Android | 11 月刊 · 2019

作者头像
Android 开发者
发布2019-11-29 10:31:19
6000
发布2019-11-29 10:31:19
举报
文章被收录于专栏:Android 开发者Android 开发者

作者 / Chet Haase, Android 开发技术推广工程师

欢迎大家来到 Now in Android 栏目,本栏目将专注于为开发者们提供近期值得关注的 Android 开发热点内容。

请务必跟上 Android 10

我们在 Android 10 预览版阶段收到了有关 API 和功能的重要反馈,并且得以在发布最终版之前进行改进。但另一方面,预览版让操作系统在真正发布时不那么令人兴奋了,因为每个人都已经知道了那些新功能。就像是您看着别人在您面前把礼品打包好,然后您再打开包装一样,可能不会有太多的惊喜。

但是我们相信,开发者们会体验到一种不一样的满足感: 知道事情已经完成,知道自己手上的 API 都是稳定的,并可以开始使用它构建应用。而且很多时候开发者还能直接获得源代码,这会带来巨大的优势。同时您也知道,现在用户会开始获取和使用这个版本。

正式发布的 Android 10 (包括 AOSP、开发者下载版及其他渠道),包含了我们一直努力构建的所有功能的最终版本: 手势导航、隐私功能、实时字幕、智能通知、深色主题、ART 优化等等。您可以在 Android 开发者博客中查看概述,或者直接进入开发者网站阅读详细文档并下载所需的资源。

除了稳定,还是稳定

大量 AndroidX 库刚刚发了稳定版本,其中包括许多基础模块,一些架构组件以及媒体库:

AndroidX 版本已完成分类

AndroidX 版本页面最近变得越来越好用了。如果您只关心稳定版本 (或是只想了解最新的 Alpha 版本),只需扫一眼页面顶部给出的分类链接即可。

例如,如果您想了解上面提到的稳定代码库,只需单击该页面右上角的 Stable 分类链接即可。

示例代码大迁移

组织代码其实有点像做家务: 最初,一切都是各就各位的,几年后,装黄油的盘子就会出现在书架上、订书机会和装糖的碗放在一起、过节日时挂起来的各种装饰永远不会被撤下来,因为没有别的地方可以放。

我们的 Android 示例库就处于这个状态。刚开始时,整理的工作量不值一提,但是在经过了数百个项目之后,情况开始变得混乱起来。

在大家的共同努力下,我们已经相当彻底的整理了 Android 示例代码库,现在您可以在同一个地方找到它们: github.com/android,这些例子现在被分类为 17 个小 repo 组,方便您更轻松地在相关课题中找到样例项目。我们的示例代码仓库也接受开发者们的 Pull Request,欢迎大家尝试并积极贡献。

△ 整理之后的 repos 更整洁、识别度更高 迁移工作尚未全部完成,但到目前为止,我们已经从 136 个项目中整理出了 127 个。其余部分将在接下来的几周内完成。

为 Java 开发者准备的 Kotlin 教程

Kotlin 之所以在 Android 开发者中如此流行,首先是因为它是一种很好的语言,同样值得一提的是它与 Java 语言的强大互操作性。毕竟,大多数 Android 项目都是已经成型的代码库,而 Android SDK 是一组 Java API,因此,不同语言之间的流畅集成非常重要。

您在添加 Kotlin 代码时需要注意一些细节,这些细节会让您在将来更容易使用 Java 代码。为了让大家更好地理解这些细节知识,Nicole Borrelli 最近发布了这个 codelab,来帮助那些希望流畅使用 Java 代码的 Kotlin 开发者。

视图绑定 (View binding)

开发者们讨厌样板代码。我们一生中能输入的字符数量是有限的,为什么要在不必要的语法和表达式上浪费生命?

在深受困扰的开发者们看来,Android 开发中不断出现的样板代码中最恼人的就是 findViewById()。每当您要引用层次结构中的视图时,都必须使用正确的视图 ID,并重复输入类型信息。

您最终会写出这样的代码:

代码语言:javascript
复制
var b: Button = findViewById(R.id.button23)
// or
var b = findViewById<Button>(R.id.button23)
// or even
var b = findViewById(R.id.button23) as Button

单独看起来,需要的代码量并不很多,但是当您必须对每个视图都这么处理的时候,这个工作量就不能视若无睹了。

一种流行的解决方法是使用 ButterKnife 代码库,让您能这样注解变量:

代码语言:javascript
复制
@BindView(R.id.button23)
lateinit var button: Button

开发者们还会使用数据绑定来实现类似的效果,这种做法的本质是,在与布局文件关联的绑定对象中为视图创建变量。

不过在架构组件的最新进展中,我们谈到了 Jake Wharton 正在研究的一种新机制: 视图绑定 (View Binding)。视图绑定更接近数据绑定,从而避免了 ButterKnife 的注解处理方法。用 Jake 的话说,"这是 findViewById 和完整数据绑定的中间地带。"

要使用视图绑定,首先需要在 gradle 构建中启用它:

代码语言:javascript
复制
android {
   viewBinding.enabled = true
}

然后,在您的代码中就可以获得对绑定对象的引用,并且直接通过绑定对象里的字段访问视图。它的工作方式与数据绑定类似,但是不需要专门的数据资源文件,而只需使用普通的 XML 布局文件即可。

视图绑定Android Studio 3.6 Canary 11 可以开始体验。

分区存储

Android 10 带来的一个重要特性是分区外部存储 (Scoped External Storage),旨在限制应用对不是自己创建的文件的访问权限,从而保护用户的数据安全与隐私。

简而言之: 应用可以随时访问自己创建的文件,不需要授权。但是,如果要访问其他应用创建的照片/视频/音频文件,则必须获得 READ_EXTERNAL_STORAGE 权限。对于其他文件类型,则必须使用 Storage Access Framework 来让用户选取文件。

△ 使用正确的权限和 MediaStore API 来让您的 Android 10 应用访问由其他应用创建的内容

我们准备了详细的文档,涵盖了处理外部存储文件的 API 和做法。但如果您是刚接触外部文件存储的话,阅读文档里的说明可能会需要多花费一些精力,我们也会努力迭代文档以让内容更加易懂。与此同时,Nicole Borrelli 在 Github 上的 Storage Samples 项目中创建了 MediaStore 示例来帮助您快速上手。示例里有展示应该如何请求适当权限访问文件,然后使用适当的 MediaStore API 来实际加载它们。

在我们近期连载发布 2019 Android 开发者峰会中文视频中也有一个关于分区存储的演讲,分享了一些最新的更新和接下来 Android 版本里的改变。

  • 腾讯视频链接:

v.qq.com/x/page/d302…

  • Bilibili 视频链接:

www.bilibili.com/video/av771…

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年11月28日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 请务必跟上 Android 10
  • 除了稳定,还是稳定
  • AndroidX 版本已完成分类
  • 示例代码大迁移
  • 为 Java 开发者准备的 Kotlin 教程
  • 视图绑定 (View binding)
  • 分区存储
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档