第1章 Android新特性

依据2017年首版完整目录覆盖14个节点:从Android 5.0的RecyclerView、CardView、通知、Toolbar和Palette,走到Android 6.0运行时权限与Android 7.0多窗口

第1章 Android新特性

本页依据刘望舒《Android进阶之光》独立重构,不复制原文。版本锁定电子工业出版社2017年7月首版、492页、ISBN 9787121315305;正式结构为11章、190个章/节/小节节点。

原书处在Android 5.0至7.0、Java与Support Library时代,包含AsyncTask、Volley、otto、RxJava早期版本、ButterKnife、Dagger 2和Data Binding。课程先复现历史机制,再以AndroidX、协程/Flow、现代架构组件作迁移对照。

学习目标

  • 能解释“第1章 Android新特性”全部14个正式节点的输入、线程、生命周期与可观察结果。
  • 能实现“从Android 5.0的RecyclerView、CardView、通知、Toolbar和Palette,走到Android 6.0运行时权限与Android 7.0多窗口”的最小可运行切片并保存版本、源码、样本和日志。
  • 能区分正确结果、框架便利、隐藏成本和版本差异,并用API级别分支、权限状态机、通知样例、滚动复用、窗口尺寸变化与进程恢复验收。
  • 能设计反例推翻“只按最新系统测试,把运行时权限、多窗口和旧API回退当成不会发生的边缘情况”,写出2017年机制到现代Android的迁移与回退条件。

从可观察行为开始

构成本页的分析词汇。先预测一次输入会穿过哪些对象、线程、队列、View或语言边界,再运行正常与失败样本;没有版本和原始证据的“源码原理”不能复查。

本单元主线是从Android 5.0的RecyclerView、CardView、通知、Toolbar和Palette,走到Android 6.0运行时权限与Android 7.0多窗口。交互管线逐项选择目录节点,反例实验切换正常、配置变化、线程竞争、所有者销毁和版本漂移,证据门要求目录、行为、线程、生命周期与迁移全部通过。

权威目录逐节点映射

第1章 Android新特性

章节合同 1/14。 把本节点放进“从Android 5.0的RecyclerView、CardView、通知、Toolbar和Palette,走到Android 6.0运行时权限与Android 7.0多窗口”主线:先确定输入与所有者,再追踪线程、View、网络、对象或源码调用,最后以API级别分支、权限状态机、通知样例、滚动复用、窗口尺寸变化与进程恢复验收。只记API和类名不能证明掌握。

1.1 Android 5.0新特性

实现检查点 2/14。 把本节点放进“从Android 5.0的RecyclerView、CardView、通知、Toolbar和Palette,走到Android 6.0运行时权限与Android 7.0多窗口”主线:先确定输入与所有者,再追踪线程、View、网络、对象或源码调用,最后以API级别分支、权限状态机、通知样例、滚动复用、窗口尺寸变化与进程恢复验收。只记API和类名不能证明掌握。

1.1.1 Android 5.0主要新特性概述

实现检查点 3/14。 把本节点放进“从Android 5.0的RecyclerView、CardView、通知、Toolbar和Palette,走到Android 6.0运行时权限与Android 7.0多窗口”主线:先确定输入与所有者,再追踪线程、View、网络、对象或源码调用,最后以API级别分支、权限状态机、通知样例、滚动复用、窗口尺寸变化与进程恢复验收。只记API和类名不能证明掌握。

1.1.2 替换ListView和GridView的RecyclerView

实现检查点 4/14。 把本节点放进“从Android 5.0的RecyclerView、CardView、通知、Toolbar和Palette,走到Android 6.0运行时权限与Android 7.0多窗口”主线:先确定输入与所有者,再追踪线程、View、网络、对象或源码调用,最后以API级别分支、权限状态机、通知样例、滚动复用、窗口尺寸变化与进程恢复验收。只记API和类名不能证明掌握。

1.1.3 卡片CardView

实现检查点 5/14。 把本节点放进“从Android 5.0的RecyclerView、CardView、通知、Toolbar和Palette,走到Android 6.0运行时权限与Android 7.0多窗口”主线:先确定输入与所有者,再追踪线程、View、网络、对象或源码调用,最后以API级别分支、权限状态机、通知样例、滚动复用、窗口尺寸变化与进程恢复验收。只记API和类名不能证明掌握。

1.1.4 3种Notification

实现检查点 6/14。 把本节点放进“从Android 5.0的RecyclerView、CardView、通知、Toolbar和Palette,走到Android 6.0运行时权限与Android 7.0多窗口”主线:先确定输入与所有者,再追踪线程、View、网络、对象或源码调用,最后以API级别分支、权限状态机、通知样例、滚动复用、窗口尺寸变化与进程恢复验收。只记API和类名不能证明掌握。

1.1.5 Toolbar与Palette

实现检查点 7/14。 把本节点放进“从Android 5.0的RecyclerView、CardView、通知、Toolbar和Palette,走到Android 6.0运行时权限与Android 7.0多窗口”主线:先确定输入与所有者,再追踪线程、View、网络、对象或源码调用,最后以API级别分支、权限状态机、通知样例、滚动复用、窗口尺寸变化与进程恢复验收。只记API和类名不能证明掌握。

1.2 Android 6.0新特性

实现检查点 8/14。 把本节点放进“从Android 5.0的RecyclerView、CardView、通知、Toolbar和Palette,走到Android 6.0运行时权限与Android 7.0多窗口”主线:先确定输入与所有者,再追踪线程、View、网络、对象或源码调用,最后以API级别分支、权限状态机、通知样例、滚动复用、窗口尺寸变化与进程恢复验收。只记API和类名不能证明掌握。

1.2.1 Android 6.0主要新特性概述

实现检查点 9/14。 把本节点放进“从Android 5.0的RecyclerView、CardView、通知、Toolbar和Palette,走到Android 6.0运行时权限与Android 7.0多窗口”主线:先确定输入与所有者,再追踪线程、View、网络、对象或源码调用,最后以API级别分支、权限状态机、通知样例、滚动复用、窗口尺寸变化与进程恢复验收。只记API和类名不能证明掌握。

1.2.2 运行时权限机制

实现检查点 10/14。 把本节点放进“从Android 5.0的RecyclerView、CardView、通知、Toolbar和Palette,走到Android 6.0运行时权限与Android 7.0多窗口”主线:先确定输入与所有者,再追踪线程、View、网络、对象或源码调用,最后以API级别分支、权限状态机、通知样例、滚动复用、窗口尺寸变化与进程恢复验收。只记API和类名不能证明掌握。

1.3 Android 7.0新特性

实现检查点 11/14。 把本节点放进“从Android 5.0的RecyclerView、CardView、通知、Toolbar和Palette,走到Android 6.0运行时权限与Android 7.0多窗口”主线:先确定输入与所有者,再追踪线程、View、网络、对象或源码调用,最后以API级别分支、权限状态机、通知样例、滚动复用、窗口尺寸变化与进程恢复验收。只记API和类名不能证明掌握。

1.3.1 Android 7.0主要新特性概述

实现检查点 12/14。 把本节点放进“从Android 5.0的RecyclerView、CardView、通知、Toolbar和Palette,走到Android 6.0运行时权限与Android 7.0多窗口”主线:先确定输入与所有者,再追踪线程、View、网络、对象或源码调用,最后以API级别分支、权限状态机、通知样例、滚动复用、窗口尺寸变化与进程恢复验收。只记API和类名不能证明掌握。

1.3.2 多窗口模式

实现检查点 13/14。 把本节点放进“从Android 5.0的RecyclerView、CardView、通知、Toolbar和Palette,走到Android 6.0运行时权限与Android 7.0多窗口”主线:先确定输入与所有者,再追踪线程、View、网络、对象或源码调用,最后以API级别分支、权限状态机、通知样例、滚动复用、窗口尺寸变化与进程恢复验收。只记API和类名不能证明掌握。

1.4 本章小结

主题边界 14/14。 把本节点放进“从Android 5.0的RecyclerView、CardView、通知、Toolbar和Palette,走到Android 6.0运行时权限与Android 7.0多窗口”主线:先确定输入与所有者,再追踪线程、View、网络、对象或源码调用,最后以API级别分支、权限状态机、通知样例、滚动复用、窗口尺寸变化与进程恢复验收。只记API和类名不能证明掌握。

最小实现与边界

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
    checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
    requestPermissions(arrayOf(Manifest.permission.CAMERA), REQUEST_CAMERA)
} else {
    openCamera()
}

实现后用固定输入记录输出、线程名、生命周期、异常和资源释放。再构造错误输入、取消、旋转、后台切前台及低版本设备,验证便利框架没有隐藏所有权问题。

data class AndroidProbe(
    val apiLevel: Int,
    val ownerActive: Boolean,
    val callbackThread: String,
    val resultStable: Boolean
)
check(probe.ownerActive && probe.resultStable)

证据解释

第一份证据是行为基线。固定Android版本、依赖版本、构建类型、输入数据和页面生命周期,完整记录“从Android 5.0的RecyclerView、CardView、通知、Toolbar和Palette,走到Android 6.0运行时权限与Android 7.0多窗口”从入口到结果的顺序。除了成功输出,还要保存回调线程、对象身份、队列或订阅状态以及释放日志;否则无法判断升级后的差异来自业务代码、框架实现还是测试环境。

第二份证据是反例。针对“只按最新系统测试,把运行时权限、多窗口和旧API回退当成不会发生的边缘情况”构造至少一个可重复失败:在配置变化、快速重复输入、网络超时、后台切换或所有者销毁时观察错位、重复、泄漏和迟到回调。反例必须写明预期拒绝条件;只展示正常路径会掩盖框架最重要的所有权边界。

第三份证据是源码定位。先锁定仓库标签和库版本,再从公开入口沿实际调用追踪,不跨版本拼接类名。每次跨线程、跨进程或跨Java/Native边界,都记录调用方、被调用方、数据形态、错误返回和资源归属。API级别分支、权限状态机、通知样例、滚动复用、窗口尺寸变化与进程恢复应能让另一位读者在相同版本上重建同一条链。

第四份证据是迁移对照。现代API解决的问题可能相同,但取消、缓存、状态恢复、线程和错误语义未必一致。迁移时保持输入和验收不变,一次只替换一个组件;新旧结果不一致时先解释差异,再决定适配或回退,不能用“新版推荐”跳过历史行为验证。

迁移账本

原书节点: 第1章 Android新特性
历史基线: Android 5.0—7.0 / Java / Support Library
现代候选: 一次只替换一个API或框架
不变量: 业务结果、线程、生命周期、错误与资源释放
证据: API级别分支、权限状态机、通知样例、滚动复用、窗口尺寸变化与进程恢复
回退: 任一不变量失败即恢复历史实现

本章回顾

从一个真实输入复盘:它由谁接收、在哪个线程执行、状态和对象归谁所有、何时取消或释放、低版本与异常路径如何表现。然后用API级别分支、权限状态机、通知样例、滚动复用、窗口尺寸变化与进程恢复重放;无法复现的结论退回实验阶段。

复习与独立交接

练习

问题 1:为什么本页必须保留14个目录节点?

问题 2:最小正确性合同是什么?

问题 3:怎样构造最有效的反例?

问题 4:为什么只读源码类名不够?

问题 5:怎样迁移而不改写原书?

问题 6:独立交接需要什么?

名词解释

本章出现的专业名词,用大白话再讲一遍。

API级别
用于区分Android平台接口与行为版本的整数标识。
RecyclerView复用
通过ViewHolder与回收池限制列表项创建并复用离屏视图的机制。
运行时权限
危险权限在安装后由用户按需授予、拒绝或撤销的状态流程。
多窗口
Activity在非全屏可变窗口中运行并经历尺寸与生命周期变化的模式。
版本回退
在较低系统或能力缺失时保持正确功能与可理解体验的替代路径。

← 上一页:《Android进阶之光》权威学习地图 · 下一页:第2章 Material Design →

资料与写作方式声明

本章以刘望舒《Android进阶之光》权威目录界定学习范围,并结合正文列出的技术资料独立重写;不宣称复现原书正文,也不沿用原作表述。

原作版权归作者与出版社所有;本站原创教学结构与表述仅供学习交流。

讨论

评论区加载中…