# 一、Android 四大组件(四大基本构建块)

Android 应用由四大组件构成,它们是应用架构的核心:

# 1. Activity(活动)

  • 表示一个用户界面屏幕
  • 用户与 App 交互的入口点(如登录页、主页面等)。
  • 生命周期方法:onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy()

# 2. Service(服务)

  • 后台执行长时间运行操作,不提供 UI。
  • 可用于播放音乐、下载文件、处理网络请求等。
  • 分为:
    • Started Service(通过 startService() 启动)
    • Bound Service(通过 bindService() 绑定,支持 IPC)

注意:从 Android 8.0(API 26)起,后台限制严格,推荐使用 WorkManagerJobScheduler 替代长时间后台服务。

# 3. BroadcastReceiver(广播接收器)

  • 用于监听系统或应用发出的广播事件(如网络变化、电量低、自定义事件)。
  • 可以在 Manifest 中静态注册,也可以在代码中动态注册。
  • 执行时间受限(通常 ≤10 秒),适合轻量任务;重任务应启动 Service 或使用 WorkManager

# 4. ContentProvider(内容提供者)

  • 用于在不同应用之间共享数据(如通讯录、相册)。
  • 封装了底层数据(如 SQLite 数据库),通过 URI 提供统一访问接口。
  • 常配合 CursorLoaderContentResolver 使用。

# 二、常见资源(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
}