Launcher3 中的 MVC 架构类解析

发布于:2025-06-27 ⋅ 阅读:(232) ⋅ 点赞:(0)

Launcher3 中的 MVC 架构类解析

一、模型层(Model)

模型层负责存储数据和处理业务逻辑,不依赖于视图层。

类名 功能描述
BgDataModel 维护 Launcher 的所有内存数据,提供数据增删改查方法
包含数据结构:itemsIdMap、workspaceItems、appWidgets、collections
关键方法:addItem()、removeItem()、updateShortcutPinnedState()
ItemInfo 及其子类 表示 Launcher 中的各种项目(应用、快捷方式、小部件等)
子类:AppInfo、FolderInfo、LauncherAppWidgetInfo、WorkspaceItemInfo
WidgetsModel 管理所有可用小部件的数据
ShortcutRequest 处理深度快捷方式的查询和管理
二、视图层(View)

视图层负责展示数据和接收用户输入,通常是 Android 的 UI 组件。

类名 功能描述
Workspace 主屏幕工作区,显示和管理应用图标、文件夹和小部件
Hotseat 底部固定栏,显示常用应用
AllAppsContainerView 所有应用列表视图
Folder 文件夹视图,管理和显示文件夹内的应用
LauncherAppWidgetHostView 小部件的宿主视图
BubbleTextView 应用图标的文本标签视图
三、控制器层(Controller)

控制器层处理用户交互,协调模型和视图之间的通信。

类名 功能描述
LauncherModel 核心控制器,负责加载数据、处理更新,并通知视图刷新
关键方法:startLoader()、bindItems()、bindScreens()
Launcher 主 Activity,处理用户点击事件并调用模型操作
处理图标拖拽、文件夹创建等用户交互操作
LoaderTask 后台任务,负责从系统加载应用和小部件数据
InstallShortcutReceiver 处理快捷方式安装请求的广播接收器
四、交互接口

为实现模型与视图的解耦,Launcher3 使用接口定义通信契约。

接口名 功能描述
BgDataModel.Callbacks 模型通知视图更新的回调接口,视图组件实现此接口以接收数据变更通知
包含方法:bindItems()、bindScreens()、bindDeepShortcutMap() 等
五、MVC 协作流程示例

以「添加应用到主屏幕」为例:

  1. 用户点击应用(视图层)
    Workspace 或 AllAppsContainerView 捕获点击事件

  2. 通知控制器(Launcher)
    事件传递给 Launcher 处理

  3. 控制器操作模型(LauncherModel)
    Launcher 调用 LauncherModel.addItemToDatabase() 添加应用

  4. 模型更新数据(BgDataModel)
    BgDataModel 更新 workspaceItems 和 itemsIdMap 数据结构

  5. 模型通知视图(Callbacks)
    通过 Callbacks.bindItems() 接口通知视图刷新

  6. 视图更新UI(Workspace)
    Workspace 接收通知后重绘界面显示新应用

六、架构设计优势
  1. 职责分离:数据管理、UI展示、逻辑控制独立维护,代码结构清晰
  2. 低耦合性:通过接口通信,模型与视图层解耦,便于独立扩展
  3. 可测试性:模型层可独立进行单元测试,不依赖UI组件
  4. 性能优化:后台数据加载与UI渲染分离,提升用户交互体验
  5. 多用户支持:模型设计包含UserHandle,天然支持多用户数据隔离

微信公众号

今日签到

点亮在社区的每一天
去签到