Launcher3 中的 MVC 架构类解析

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

Launcher3 中的 MVC 架构类解析

一、模型层(Model)

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

类名 功能描述
BgDataModel 维护 Launcher 的所有内存数据,提供数据增删改查方法
包含数据结构:itemsIdMapworkspaceItemsappWidgetscollections
关键方法:addItem()removeItem()updateShortcutPinnedState()
ItemInfo 及其子类 表示 Launcher 中的各种项目(应用、快捷方式、小部件等)
子类:AppInfoFolderInfoLauncherAppWidgetInfoWorkspaceItemInfo
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. 用户点击应用(视图层)
    WorkspaceAllAppsContainerView 捕获点击事件

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

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

  4. 模型更新数据(BgDataModel)
    BgDataModel 更新 workspaceItemsitemsIdMap 数据结构

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

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

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