# 一、Android 四大组件(四大基本构建块)
Android 应用由四大组件构成,它们是应用架构的核心:
# 1. Activity(活动)
- 表示一个用户界面屏幕。
- 用户与 App 交互的入口点(如登录页、主页面等)。
- 生命周期方法:
onCreate(),onStart(),onResume(),onPause(),onStop(),onDestroy()。
# 2. Service(服务)
- 在后台执行长时间运行操作,不提供 UI。
- 可用于播放音乐、下载文件、处理网络请求等。
- 分为:
- Started Service(通过
startService()启动) - Bound Service(通过
bindService()绑定,支持 IPC)
- Started Service(通过
注意:从 Android 8.0(API 26)起,后台限制严格,推荐使用
WorkManager或JobScheduler替代长时间后台服务。
# 3. BroadcastReceiver(广播接收器)
- 用于监听系统或应用发出的广播事件(如网络变化、电量低、自定义事件)。
- 可以在 Manifest 中静态注册,也可以在代码中动态注册。
- 执行时间受限(通常 ≤10 秒),适合轻量任务;重任务应启动 Service 或使用
WorkManager。
# 4. ContentProvider(内容提供者)
- 用于在不同应用之间共享数据(如通讯录、相册)。
- 封装了底层数据(如 SQLite 数据库),通过 URI 提供统一访问接口。
- 常配合
CursorLoader和ContentResolver使用。
# 二、常见资源(Resources)
Android 项目中的 res/ 目录存放各种资源文件,编译时会生成 R.java 引用。
| 资源类型 | 路径 | 说明 |
|---|---|---|
| 布局文件 | res/layout/ | XML 定义 UI(如 activity_main.xml) |
| 字符串 | res/values/strings.xml | 多语言支持、集中管理文本 |
| 颜色 | res/values/colors.xml | 定义颜色常量 |
| 样式/主题 | res/values/styles.xml | 控件样式和 App 主题 |
| 图片/矢量图 | res/drawable/ 或 res/mipmap/ | 图标、背景图等(mipmap 专用于 launcher icon) |
| 尺寸 | res/values/dimens.xml | 定义 dp、sp 等尺寸值 |
| 动画 | res/anim/ 或 res/animator/ | View 动画或属性动画 |
| 原始文件 | res/raw/ | 音频、配置文件等(保留原始格式) |
推荐使用 Resource Qualifiers(如
-zh,-sw600dp)实现多语言、多屏幕适配。
# 三、常用实体(常用类/对象)
| 类/对象 | 用途 |
|---|---|
Context | 上下文,用于访问资源、启动 Activity、获取系统服务等(Activity 和 Application 都是 Context 子类) |
Intent | 用于组件间通信(启动 Activity、Service,发送广播) |
Bundle | 键值对容器,常用于在 Activity 间传递数据或保存状态 |
SharedPreferences | 轻量级键值存储,适合保存用户设置等简单数据 |
SQLiteOpenHelper / Room | 本地数据库操作(Room 是官方推荐的 ORM 库) |
View / ViewGroup | UI 基础组件,所有控件的父类 |
RecyclerView | 高效列表控件,替代 ListView |
Fragment | 模块化 UI 单元,可嵌入 Activity,支持动态切换 |
# 四、常用线程与异步机制
Android 主线程(UI 线程)不能执行耗时操作,否则会 ANR(Application Not Responding)。常用异步方案:
# 1. Thread + Handler
- 手动创建线程处理任务,通过
Handler切回主线程更新 UI。 - 适合简单场景,但代码较繁琐。
# 2. AsyncTask(已弃用)
- 旧版异步工具类(API 30 起标记为废弃),不推荐新项目使用。
# 3. ExecutorService
- Java 标准线程池,灵活控制并发任务。
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(() -> {
// 后台任务
runOnUiThread(() -> { /* 更新 UI */ });
});
# 4. Coroutine(Kotlin 推荐)
- Kotlin 协程:简洁、结构化并发。
lifecycleScope.launch {
val result = withContext(Dispatchers.IO) {
// 耗时操作
}
// 自动切回主线程更新 UI
textView.text = result
}