第6章 Android应用资源

依据电子工业出版社第4版完整目录,覆盖38个本页节点:从资源类型、R引用、Drawable、动画、XML、布局、菜单、Style、Theme、Attribute和限定符建立适配体系

第6章 Android应用资源

在《第6章 Android应用资源》中,本页依据电子工业出版社《疯狂Android讲义》第4版完整目录独立重构,不复制原文。版本锁定李刚、2019年3月、764页、ISBN 9787121360091,以Android 9 系列、Android Studio与Java为基线;现代项目必须另建迁移层,不能无说明地把Compose或最新targetSdk规则写回原书语境。

学习目标

  • 能解释“第6章 Android应用资源”全部正式节点的组件所有者、生命周期、线程、权限和Android 9 系列版本边界。
  • 能实现“从资源类型、R引用、Drawable、动画、XML、布局、菜单、Style、Theme、Attribute和限定符建立适配体系”的最小垂直切片,并保存构建、设备操作、原始日志和断言。
  • 能比较正常运行、旋转、后台、进程重建、权限拒绝与外部故障下的行为差异。
  • 能设计推翻当前实现的反例,并凭资源限定符决策表、Drawable状态图、主题解析链、国际化与多屏截图完成独立交接。

机制总览

第6章 Android应用资源:机制路径

  1. 1

    从项目合同与生命周期开始

    在《第6章 Android应用资源》中,第4版以近百个实例和两个综合项目组织知识,不是零散API列表。每个节点都要回答用户从哪里进入、哪个组件拥有工作、回调在哪个线程发生、哪些事实必须恢复、需要什么权限、外部系统如何失败,以及资源何时释放。

  2. 2

    最小可执行切片

    ScreenState reduce(ScreenState current, UiEvent event) return nextState(current, event);

  3. 3

    线程、权限、状态与资源

    在《第6章 Android应用资源》中,主线程负责输入、生命周期分发和UI;文件、SQLite、网络、图片解码、OpenGL准备与长计算不得阻塞帧。后台结果返回前确认所有者仍有效,Service并不自动拥有后台线程,Receiver也不能无限运行。每个实现列出入口、线程、事实源、权限、取消点、关闭责任和用户可见失败。

先按顺序建立机制,再进入实验切换阶段并检查失效证据。

章级决策实验

第6章 Android应用资源:机制与证据

切换《第6章 Android应用资源》的三个关键教学阶段,先解释机制,再用运行与失败证据验证结论。

选择推理阶段

当前阶段 · 从项目合同与生命周期开始

在《第6章 Android应用资源》中,第4版以近百个实例和两个综合项目组织知识,不是零散API列表。每个节点都要回答用户从哪里进入、哪个组件拥有工作、回调在哪个线程发生、哪些事实必须恢复、需要什么权限、外部系统如何失败,以及资源何时释放。

可核验证据

在 Android 9.x/Java 基线上复现「从项目合同与生命周期开始」,保存构建与设备指纹、操作、线程/生命周期轨迹、状态快照,并注入一个权限、重建或外部服务失败。

学完《第6章 Android应用资源》后,应能从输入和前置条件推导状态变化,并用可重复的构建、运行或边界测试证明结果。

失效—证据矩阵

第6章 Android应用资源:失效与核验

从项目合同与生命周期开始

典型失效

若学习「从项目合同与生命周期开始」只复制正常路径示例而不声明组件 owner、线程、状态、权限与外部失败,应用会在旋转、进程重建、拒权或弱网时丢失行为。

核验证据

在 Android 9.x/Java 基线上复现「从项目合同与生命周期开始」,保存构建与设备指纹、操作、线程/生命周期轨迹、状态快照,并注入一个权限、重建或外部服务失败。

最小可执行切片

典型失效

若学习「最小可执行切片」只复制正常路径示例而不声明组件 owner、线程、状态、权限与外部失败,应用会在旋转、进程重建、拒权或弱网时丢失行为。

核验证据

在 Android 9.x/Java 基线上复现「最小可执行切片」,保存构建与设备指纹、操作、线程/生命周期轨迹、状态快照,并注入一个权限、重建或外部服务失败。

线程、权限、状态与资源

典型失效

若学习「线程、权限、状态与资源」只复制正常路径示例而不声明组件 owner、线程、状态、权限与外部失败,应用会在旋转、进程重建、拒权或弱网时丢失行为。

核验证据

在 Android 9.x/Java 基线上复现「线程、权限、状态与资源」,保存构建与设备指纹、操作、线程/生命周期轨迹、状态快照,并注入一个权限、重建或外部服务失败。

每个判断都必须能落到观测、测试或产物,不能只凭代码表面推测。

从项目合同与生命周期开始

在《第6章 Android应用资源》中,第4版以近百个实例和两个综合项目组织知识,不是零散API列表。每个节点都要回答用户从哪里进入、哪个组件拥有工作、回调在哪个线程发生、哪些事实必须恢复、需要什么权限、外部系统如何失败,以及资源何时释放。连接Activity、Fragment、View、Service、Receiver、线程与媒体资源。

在《第6章 Android应用资源》中,界面字段和进程单例不是可靠事实源。要按大小和寿命放入Bundle、文件、SQLite或服务端。Intent、Provider、网络、定位、地图和系统服务构成,成功响应只是其中一个样本。

在《第6章 Android应用资源》中,本书准确反映Android 9时代。要求先复现原书机制,再迁移组件导出、分区存储、通知、后台启动、位置和废弃API。保证示例不是只在作者机器上可用。

最小可执行切片

先把业务状态转换与Android副作用分开,便于在设备之外验证不变量:

sealed interface ScreenState permits Loading, Ready, Failed {}
record Loading() implements ScreenState {}
record Ready(String key) implements ScreenState {}
record Failed(String reason, boolean retryable) implements ScreenState {}
 
ScreenState reduce(ScreenState current, UiEvent event) { return nextState(current, event); }

固定环境并从命令行保留构建和设备证据:

./gradlew --no-daemon clean test assembleDebug
adb install -r app/build/outputs/apk/debug/app-debug.apk
adb shell am force-stop org.example.app
adb shell monkey -p org.example.app 1
adb logcat -d -v threadtime > run.log

先写行为合同,再执行用户动作与故障注入:

Given a pinned JDK, SDK, Gradle build, device API, locale, permission state, and input
When the owner is recreated after state saving or process death
Then durable facts reconstruct the same user-visible state
And cancelled work cannot update a destroyed owner
And denied permission, offline input, malformed data, and missing hardware remain recoverable

在《第6章 Android应用资源》中,三段代码分别约束状态模型、环境重放和行为结果。第4版源码使用当时Java/Android API;这里的状态骨架只说明测试边界,不冒充原书代码。真实项目还需要静态检查、仪器测试、无障碍检查和发布构建。

线程、权限、状态与资源

在《第6章 Android应用资源》中,主线程负责输入、生命周期分发和UI;文件、SQLite、网络、图片解码、OpenGL准备与长计算不得阻塞帧。后台结果返回前确认所有者仍有效,Service并不自动拥有后台线程,Receiver也不能无限运行。每个实现列出入口、线程、事实源、权限、取消点、关闭责任和用户可见失败。

在《第6章 Android应用资源》中,Intent、Provider、WebView、JSON、文件URI、地图Key、位置和传感器样本都按不可信输入处理。在《第6章 Android应用资源》中,校验action、scheme、MIME、大小、授权、时效和响应者;导出组件最小授权;日志、截图与数据库不得泄露联系人、短信、位置、令牌或签名密钥。

在《第6章 Android应用资源》中,性能以用户任务衡量:界面看首帧和掉帧,列表看回收与分配,媒体和图形看帧时间与内存,网络看超时和取消,传感器看采样与耗电,后台工作看约束与重复调度。比较时固定设备、构建类型、数据规模和网络条件。

在《第6章 Android应用资源》中,现代迁移一次改变一个条件。在《第6章 Android应用资源》中,AsyncTask、IntentService、旧Fragment、外部存储、后台Service、隐式广播、HTTP明文、旧定位和地图SDK都需要查当前合同;先保存Android 9基线,再迁移并保留行为差异、测试和回滚。

本章回顾

本页从“第6章 Android应用资源”覆盖到“6.14 本章小结”,共38个正式目录条目。掌握标准是能沿“从资源类型、R引用、Drawable、动画、XML、布局、菜单、Style、Theme、Attribute和限定符建立适配体系”解释组件与数据边界,运行正常、重建与失败实验,并让另一位开发者仅凭资源限定符决策表、Drawable状态图、主题解析链、国际化与多屏截图重放结论。

练习

问题 1:“第6章 Android应用资源”覆盖哪些正式节点和主线?

问题 2:怎样建立本页最小可执行实验?

问题 3:为什么只在正常路径运行不能证明完成?

问题 4:怎样设计能推翻实现的反例?

问题 5:从Android 9迁移到现代targetSdk时如何控制变量?

问题 6:达到独立交接标准需要什么?

名词解释

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

生命周期所有者

负责创建、取消并最终释放组件、任务或资源的明确作用域。

可恢复状态

配置变化或进程重建后能从保存事实重新构造的最小用户状态。

外部合同

跨组件或系统边界交换数据时必须验证的类型、权限、大小、时序与失败约束。

版本边界

Android版本、targetSdk、设备能力、权限与依赖共同限定的行为适用范围。

证据链

由环境指纹、输入、操作、日志、状态快照和断言组成的可重放结论。

← 上一页:第5章 使用Intent和IntentFilter通信 · 下一页:第7章 图形与图像处理 →

原版目录概念补充核对

以下条目补齐官方目录中容易被示例主线掩盖的概念。它们不重复罗列目录,而是明确每项概念的机制、适用边界和验收证据。

6.1 应用资源概述:机制、边界与证据

第6章 Android应用资源中的6.1 应用资源概述由资源限定符、设备配置、主题继承和运行时解析共同决定,文件存在不等于会被选中。固定 APK 后改变语言、密度、方向、夜间模式或 API,记录资源 ID、匹配路径和最终像素,并检查缺省回退。

6.1.1 资源的类型及存储方式:机制、边界与证据

第6章 Android应用资源中的6.1.1 资源的类型及存储方式由资源限定符、设备配置、主题继承和运行时解析共同决定,文件存在不等于会被选中。固定 APK 后改变语言、密度、方向、夜间模式或 API,记录资源 ID、匹配路径和最终像素,并检查缺省回退。

6.1.2 使用资源:机制、边界与证据

第6章 Android应用资源中的6.1.2 使用资源由资源限定符、设备配置、主题继承和运行时解析共同决定,文件存在不等于会被选中。固定 APK 后改变语言、密度、方向、夜间模式或 API,记录资源 ID、匹配路径和最终像素,并检查缺省回退。

6.2 字符串、颜色、尺寸资源:机制、边界与证据

第6章 Android应用资源中的6.2 字符串、颜色、尺寸资源由资源限定符、设备配置、主题继承和运行时解析共同决定,文件存在不等于会被选中。固定 APK 后改变语言、密度、方向、夜间模式或 API,记录资源 ID、匹配路径和最终像素,并检查缺省回退。

6.2.1 颜色值的定义:机制、边界与证据

第6章 Android应用资源中的6.2.1 颜色值的定义要在 Android 9 系列/Java 基线上写清入口、组件 owner、线程、可恢复状态、权限和外部失败。固定设备与输入,只改变一个生命周期或平台条件,用原始日志、状态快照和最终用户结果复核。

6.2.2 定义字符串、颜色、尺寸资源文件:机制、边界与证据

第6章 Android应用资源中的6.2.2 定义字符串、颜色、尺寸资源文件由资源限定符、设备配置、主题继承和运行时解析共同决定,文件存在不等于会被选中。固定 APK 后改变语言、密度、方向、夜间模式或 API,记录资源 ID、匹配路径和最终像素,并检查缺省回退。

6.2.3 使用字符串、颜色、尺寸资源:机制、边界与证据

第6章 Android应用资源中的6.2.3 使用字符串、颜色、尺寸资源由资源限定符、设备配置、主题继承和运行时解析共同决定,文件存在不等于会被选中。固定 APK 后改变语言、密度、方向、夜间模式或 API,记录资源 ID、匹配路径和最终像素,并检查缺省回退。

6.3 数组(Array)资源:机制、边界与证据

第6章 Android应用资源中的6.3 数组(Array)资源由资源限定符、设备配置、主题继承和运行时解析共同决定,文件存在不等于会被选中。固定 APK 后改变语言、密度、方向、夜间模式或 API,记录资源 ID、匹配路径和最终像素,并检查缺省回退。

6.4 使用Drawable资源:机制、边界与证据

第6章 Android应用资源中的6.4 使用Drawable资源由资源限定符、设备配置、主题继承和运行时解析共同决定,文件存在不等于会被选中。固定 APK 后改变语言、密度、方向、夜间模式或 API,记录资源 ID、匹配路径和最终像素,并检查缺省回退。

6.4.1 图片资源:机制、边界与证据

第6章 Android应用资源中的6.4.1 图片资源由资源限定符、设备配置、主题继承和运行时解析共同决定,文件存在不等于会被选中。固定 APK 后改变语言、密度、方向、夜间模式或 API,记录资源 ID、匹配路径和最终像素,并检查缺省回退。

6.4.2 StateListDrawable资源:机制、边界与证据

第6章 Android应用资源中的6.4.2 StateListDrawable资源由 View 树、MeasureSpec、布局结果、绘制、输入焦点和可恢复状态共同决定。固定屏幕、字体和数据后改变一个尺寸、配置或复用条件,保存层级、回调顺序、无障碍语义与帧结果,避免只看静态截图。

实例:高亮显示正在输入的文本框:机制、边界与证据

第6章 Android应用资源中的实例:高亮显示正在输入的文本框要在 Android 9 系列/Java 基线上写清入口、组件 owner、线程、可恢复状态、权限和外部失败。固定设备与输入,只改变一个生命周期或平台条件,用原始日志、状态快照和最终用户结果复核。

6.4.3 LayerDrawable资源:机制、边界与证据

第6章 Android应用资源中的6.4.3 LayerDrawable资源由资源限定符、设备配置、主题继承和运行时解析共同决定,文件存在不等于会被选中。固定 APK 后改变语言、密度、方向、夜间模式或 API,记录资源 ID、匹配路径和最终像素,并检查缺省回退。

实例:定制拖动条的外观:机制、边界与证据

第6章 Android应用资源中的实例:定制拖动条的外观要在 Android 9 系列/Java 基线上写清入口、组件 owner、线程、可恢复状态、权限和外部失败。固定设备与输入,只改变一个生命周期或平台条件,用原始日志、状态快照和最终用户结果复核。

6.4.4 ShapeDrawable资源:机制、边界与证据

第6章 Android应用资源中的6.4.4 ShapeDrawable资源由资源限定符、设备配置、主题继承和运行时解析共同决定,文件存在不等于会被选中。固定 APK 后改变语言、密度、方向、夜间模式或 API,记录资源 ID、匹配路径和最终像素,并检查缺省回退。

实例:椭圆形、渐变背景的文本框:机制、边界与证据

第6章 Android应用资源中的实例:椭圆形、渐变背景的文本框要在 Android 9 系列/Java 基线上写清入口、组件 owner、线程、可恢复状态、权限和外部失败。固定设备与输入,只改变一个生命周期或平台条件,用原始日志、状态快照和最终用户结果复核。

6.4.5 ClipDrawable资源:机制、边界与证据

第6章 Android应用资源中的6.4.5 ClipDrawable资源由资源限定符、设备配置、主题继承和运行时解析共同决定,文件存在不等于会被选中。固定 APK 后改变语言、密度、方向、夜间模式或 API,记录资源 ID、匹配路径和最终像素,并检查缺省回退。

实例:徐徐展开的风景:机制、边界与证据

第6章 Android应用资源中的实例:徐徐展开的风景要在 Android 9 系列/Java 基线上写清入口、组件 owner、线程、可恢复状态、权限和外部失败。固定设备与输入,只改变一个生命周期或平台条件,用原始日志、状态快照和最终用户结果复核。

6.4.6 AnimationDrawable资源:机制、边界与证据

第6章 Android应用资源中的6.4.6 AnimationDrawable资源由资源限定符、设备配置、主题继承和运行时解析共同决定,文件存在不等于会被选中。固定 APK 后改变语言、密度、方向、夜间模式或 API,记录资源 ID、匹配路径和最终像素,并检查缺省回退。

6.5 属性动画(Property Animation)资源:机制、边界与证据

第6章 Android应用资源中的6.5 属性动画(Property Animation)资源由资源限定符、设备配置、主题继承和运行时解析共同决定,文件存在不等于会被选中。固定 APK 后改变语言、密度、方向、夜间模式或 API,记录资源 ID、匹配路径和最终像素,并检查缺省回退。

实例:不断渐变的背景色:机制、边界与证据

第6章 Android应用资源中的实例:不断渐变的背景色要在 Android 9 系列/Java 基线上写清入口、组件 owner、线程、可恢复状态、权限和外部失败。固定设备与输入,只改变一个生命周期或平台条件,用原始日志、状态快照和最终用户结果复核。

6.6 使用原始XML资源:机制、边界与证据

第6章 Android应用资源中的6.6 使用原始XML资源由资源限定符、设备配置、主题继承和运行时解析共同决定,文件存在不等于会被选中。固定 APK 后改变语言、密度、方向、夜间模式或 API,记录资源 ID、匹配路径和最终像素,并检查缺省回退。

6.6.1 定义原始XML资源:机制、边界与证据

第6章 Android应用资源中的6.6.1 定义原始XML资源由资源限定符、设备配置、主题继承和运行时解析共同决定,文件存在不等于会被选中。固定 APK 后改变语言、密度、方向、夜间模式或 API,记录资源 ID、匹配路径和最终像素,并检查缺省回退。

6.6.2 使用原始XML文件:机制、边界与证据

第6章 Android应用资源中的6.6.2 使用原始XML文件由资源限定符、设备配置、主题继承和运行时解析共同决定,文件存在不等于会被选中。固定 APK 后改变语言、密度、方向、夜间模式或 API,记录资源 ID、匹配路径和最终像素,并检查缺省回退。

6.7 使用布局(Layout)资源:机制、边界与证据

第6章 Android应用资源中的6.7 使用布局(Layout)资源由 View 树、MeasureSpec、布局结果、绘制、输入焦点和可恢复状态共同决定。固定屏幕、字体和数据后改变一个尺寸、配置或复用条件,保存层级、回调顺序、无障碍语义与帧结果,避免只看静态截图。

6.8 使用菜单(Menu)资源:机制、边界与证据

第6章 Android应用资源中的6.8 使用菜单(Menu)资源由 View 树、MeasureSpec、布局结果、绘制、输入焦点和可恢复状态共同决定。固定屏幕、字体和数据后改变一个尺寸、配置或复用条件,保存层级、回调顺序、无障碍语义与帧结果,避免只看静态截图。

6.9 样式(Style)和主题(Theme)资源:机制、边界与证据

第6章 Android应用资源中的6.9 样式(Style)和主题(Theme)资源由资源限定符、设备配置、主题继承和运行时解析共同决定,文件存在不等于会被选中。固定 APK 后改变语言、密度、方向、夜间模式或 API,记录资源 ID、匹配路径和最终像素,并检查缺省回退。

6.9.1 样式资源:机制、边界与证据

第6章 Android应用资源中的6.9.1 样式资源由资源限定符、设备配置、主题继承和运行时解析共同决定,文件存在不等于会被选中。固定 APK 后改变语言、密度、方向、夜间模式或 API,记录资源 ID、匹配路径和最终像素,并检查缺省回退。

6.9.2 主题资源:机制、边界与证据

第6章 Android应用资源中的6.9.2 主题资源由资源限定符、设备配置、主题继承和运行时解析共同决定,文件存在不等于会被选中。固定 APK 后改变语言、密度、方向、夜间模式或 API,记录资源 ID、匹配路径和最终像素,并检查缺省回退。

实例:给所有窗口添加边框、背景:机制、边界与证据

第6章 Android应用资源中的实例:给所有窗口添加边框、背景要在 Android 9 系列/Java 基线上写清入口、组件 owner、线程、可恢复状态、权限和外部失败。固定设备与输入,只改变一个生命周期或平台条件,用原始日志、状态快照和最终用户结果复核。

6.10 属性(Attribute)资源:机制、边界与证据

第6章 Android应用资源中的6.10 属性(Attribute)资源由资源限定符、设备配置、主题继承和运行时解析共同决定,文件存在不等于会被选中。固定 APK 后改变语言、密度、方向、夜间模式或 API,记录资源 ID、匹配路径和最终像素,并检查缺省回退。

6.11 使用原始资源:机制、边界与证据

第6章 Android应用资源中的6.11 使用原始资源由资源限定符、设备配置、主题继承和运行时解析共同决定,文件存在不等于会被选中。固定 APK 后改变语言、密度、方向、夜间模式或 API,记录资源 ID、匹配路径和最终像素,并检查缺省回退。

6.12 国际化:机制、边界与证据

第6章 Android应用资源中的6.12 国际化由资源限定符、设备配置、主题继承和运行时解析共同决定,文件存在不等于会被选中。固定 APK 后改变语言、密度、方向、夜间模式或 API,记录资源 ID、匹配路径和最终像素,并检查缺省回退。

6.12.1 为Android应用提供国际化资源:机制、边界与证据

第6章 Android应用资源中的6.12.1 为Android应用提供国际化资源由资源限定符、设备配置、主题继承和运行时解析共同决定,文件存在不等于会被选中。固定 APK 后改变语言、密度、方向、夜间模式或 API,记录资源 ID、匹配路径和最终像素,并检查缺省回退。

6.12.2 国际化Android应用:机制、边界与证据

第6章 Android应用资源中的6.12.2 国际化Android应用由资源限定符、设备配置、主题继承和运行时解析共同决定,文件存在不等于会被选中。固定 APK 后改变语言、密度、方向、夜间模式或 API,记录资源 ID、匹配路径和最终像素,并检查缺省回退。

6.13 自适应不同屏幕的资源:机制、边界与证据

第6章 Android应用资源中的6.13 自适应不同屏幕的资源由资源限定符、设备配置、主题继承和运行时解析共同决定,文件存在不等于会被选中。固定 APK 后改变语言、密度、方向、夜间模式或 API,记录资源 ID、匹配路径和最终像素,并检查缺省回退。

资料与写作方式声明

本章以李刚《疯狂Android讲义》第4版权威目录界定学习范围,并结合正文列出的技术资料独立重写;不宣称复现原书正文,也不沿用原作表述。

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

讨论

评论区加载中…