关于 Android 中 View、Fragment、Activity 的关系和区别,初学 Android 时确实容易被这些概念搞糊涂。先说 View、Fragment、Activity 这三个。

1️⃣** Activity(活动)**

  • Activity 是 Android 应用的一个页面,相当于一个窗口
  • 它是 UI 的入口点,用户启动应用时,通常会进入某个 Activity
  • Activity 负责管理 UI 和生命周期,可以包含多个 FragmentView

📝 简单比喻

Activity 就像一本书,书里可以有很多章节(Fragment),每一页(View)都是 UI 组件。

2️⃣** Fragment(碎片)**

  • Fragment 是 Activity 内部的一个 UI 组件,可以独立管理自己的生命周期
  • 一个 Activity 里可以包含多个 Fragment,并且 Fragment 也可以在多个 Activity 之间复用。
  • Fragment 不能单独存在,必须依附于 Activity

📝 简单比喻

Fragment 就像书里的章节,一个 Activity(书)可以有多个 Fragment(章节),这些章节可以被多个书(Activity)复用。

3️⃣** View(视图)**

  • View 是 UI 组件的最小单位,比如 ButtonTextViewRecyclerView
  • Activity 和 Fragment 都是由多个 View 组成的
  • View 只是 UI 元素,不管理应用逻辑,而 Fragment 和 Activity 负责管理 View 的行为。

📝 简单比喻

View 就像书里的一页内容,比如文字、图片、标题等。Activity 是整本书,Fragment 是书里的章节,而 View 是具体的内容。

📌** 它们的关系**

  1. Activity 负责管理 UI 和用户交互,可以包含多个 Fragment
  2. Fragment 是 Activity 里的一部分,负责管理局部 UI 和逻辑
  3. View 是 UI 组件的最小单位,Activity 和 Fragment 里都包含 View
    示例:

Activity→ 包含多个Fragment→ 每个 Fragment 包含多个View

Activity(主页面)

├── Fragment(搜索框 + 列表)
│   ├── View(RecyclerView - 显示地点列表)
│   ├── View(TextView - 搜索框)

├── Fragment(详情页面)
│   ├── View(ImageView - 显示地图)
│   ├── View(TextView - 显示地点信息)

核心定位差异

  • Activity:相当于一个”界面容器”,负责管理整个屏幕的交互和生命周期。例如:登录界面、商品详情页通常对应独立Activity。
  • Fragment:是”界面模块单元”,必须依附于Activity存在。例如:电商App首页可能由顶部导航Fragment+商品列表Fragment组成。
  • View:是基础UI元素,如按钮(Button)、文本框(TextView),它们构成Activity/Fragment中的具体视觉元素。
ActivityFragmentView
独立性独立存在,可跳转必须嵌入 Activity必须依附于 Activity 或 Fragment
生命周期完整生命周期(onCreate, onDestroy)受宿主 Activity 影响的生命周期无独立生命周期
用途管理整个屏幕模块化 UI,提高复用性基础 UI 元素(按钮、文本框)

❓问题

Q1:Fragment必须绑定到Activity吗?

是的! Fragment 不能独立存在,必须通过 Activity 的FragmentManager动态添加或静态嵌入(通过XML布局)。

Q2:什么时候用Activity?什么时候用Fragment?

  • 用Activity:当需要完全切换屏幕(比如从登录页跳转到主页)。
  • 用Fragment:当需要在一个屏幕内动态切换部分内容(比如Tab栏切换、响应不同屏幕尺寸)。

Q3:View和Fragment谁更底层?

View是最底层:Fragment和Activity最终都由View构成。

Q4:自定义 View 和 Fragment 都可以包含多个组件,那它们之间有什么区别?

这里只讨论一种自定义 View 的形式,项目中的自定义 View 大部分都是通过 ViewGroup 的形式来实现的。通过 ViewGroup 来容纳多个子 View 来实现一个组件,比如用户信息卡片。但是,它本质上还是 View,只是用于组织多个子 View 的排布。而 Fragment 不仅仅是 UI 组件,它还是一个生命周期管理单位onCreate()onDestroy() 等),负责控制 UI 逻辑。

特点自定义 ViewFragment
是否有生命周期❌ 只有 onDraw()onMeasure()onLayout()onCreate()onResume()onPause()
是否可以管理子 View✅(ViewGroup 可以)
是否可以独立存在❌ 必须放在 Activity 或 Fragment 里❌ 必须放在 Activity 里
主要作用绘制 UI,创建一个新的 UI 组件管理 UI 逻辑,负责界面生命周期

✅ Fragment 可以实现 View 能做的所有事情,因为 Fragment 里本质上还是要用 View 来展示 UI。
✅ View 只负责 UI 绘制,不涉及生命周期管理、数据处理,所以更轻量级,性能更好。
✅ Fragment 更强大,可以管理生命周期、数据、交互逻辑,但占用的资源更多。

更新: 2025-03-24 10:53:08
原文: https://www.yuque.com/dongpozhouzi-mshe3/zhm85g/ut7hub9czbw06ygt


相关笔记