基于android 13,部分代码涉及到14 15
Core Components Architecture
更详细的launcher架构大图请点击:大图
Launcher3 代码库围绕以下关键组成部分组织:
-
Launcher Activity
Launcher 类是主活动类,作为所有其他组件的容器。它处理生命周期事件、状态转换,并协调所有用户交互。
-
Workspace
Workspace 类表示可滚动的主屏幕,用户可以在其中放置应用、文件夹和小部件。它由多个 CellLayout 实例组成,每个实例代表一个单独的主屏幕页面。
-
DragLayer
DragLayer 是一个特殊的视图组,处理启动器中的所有拖放操作。它位于所有其他组件之上,协调项目在启动器不同部分之间的移动。
-
Hotseat (Dock)
Hotseat 是屏幕底部(或在某些布局中的侧面)区域,包含常用应用程序。它在所有主屏幕页面中始终可见。
-
All Apps View
ActivityAllAppsContainerView 以可滚动的网格显示所有已安装的应用程序,通常通过从主屏幕向上滑动访问。
-
DropTargetBar
DropTargetBar 在拖动操作期间出现,并为删除或卸载应用程序等操作提供目标。
Launcher Item Types
The launcher manages several types of items that can be placed on the home screen:
Item Type | Class | Description |
---|---|---|
App Shortcut | WorkspaceItemInfo |
Icon that launches an application |
Folder | FolderInfo |
Container that holds multiple app shortcuts |
Widget | LauncherAppWidgetInfo |
Interactive application widget |
App Pair | AppPairInfo |
Shortcut that launches two apps in split-screen mode |
主要组件和职责
-
基本结构:
- 作为桌面启动器的主 Activity
- 管理工作区、应用抽屉、Hotseat(底部快捷栏)等主要 UI 组件
- 处理应用启动、桌面部件、文件夹和各种交互
-
状态管理:
- 通过
StateManager
管理桌面的不同状态(正常、全部应用、分屏等) - 处理状态转换和动画效果
- 通过
-
UI 组件:
-
Workspace
:主桌面工作区,管理多个屏幕和部件 -
Hotseat
:底部固定快捷方式区域 -
DragLayer
:处理拖拽操作的层 -
AllAppsContainerView
:全部应用视图
-
-
数据模型:
LauncherModel
:管理桌面数据,包括应用图标、部件等ModelWriter
:负责数据写入PopupDataProvider
:提供弹出菜单数据
-
事件处理:
- 处理触摸、拖拽、点击等用户交互
- 管理应用启动和返回
- 处理系统事件(如 Home 键、最近任务键)
主要功能模块
- 桌面管理:
- 管理多页桌面 (
Workspace
) - 处理页面滑动和过渡效果
- 管理图标和部件的布局 (
CellLayout
)
- 管理多页桌面 (
- 应用程序管理:
- 显示全部应用 (
AllAppsContainerView
) - 搜索和过滤应用
- 应用启动和交互
- 显示全部应用 (
- 部件管理:
- 添加和配置桌面部件 (
AppWidgetHostView
) - 调整部件大小和位置
- 部件数据更新
- 添加和配置桌面部件 (
- 文件夹功能:
- 创建和管理文件夹
- 文件夹图标和预览
- 文件夹内容排序和管理
- 拖放操作:
- 拖拽图标和部件 (
DragController
) - 处理放置目标 (
DropTarget
) - 拖拽动画和反馈
- 拖拽图标和部件 (
目录结构及关键子模块
launcher3 目录下包含多个子目录,每个都负责特定功能:
- allapps:全部应用相关的类
- anim:动画相关类
- dragndrop:拖放功能实现
- folder:文件夹相关类
- model:数据模型
- widget:部件相关类
- touch:触摸和手势处理
- accessibility:无障碍功能
- util:工具类
- views:自定义视图
关键流程
- 启动流程:
onCreate()
初始化基本组件- 设置工作区和应用抽屉
- 注册广播接收器和监听器
- 加载桌面项目:
- 通过
LauncherModel
异步加载数据 bindItems()
将数据绑定到视图- 处理图标、部件和文件夹的显示
- 通过
- 状态转换:
- 正常桌面、全部应用、部件选择等状态之间的切换
- 状态转换时的动画和布局调整
- 应用启动:
- 处理点击事件
- 启动应用程序活动
- 显示启动反馈
- 分屏功能:
- 分屏模式的进入和退出
- 应用选择和排布
Launcher.java 作为核心控制器,协调这些组件和流程,管理用户与桌面的交互,并维护桌面状态。这个文件包含了大量的方法来处理各种场景和事件,是理解整个 Launcher3 框架的关键。
Launcher UI核心组件如下:
- Launcher: 作为整个启动器体验的入口点和控制器
- DragLayer: 一个包含所有主要用户界面组件并处理拖动操作的 ViewGroup
- Workspace: 显示用户放置应用程序图标、文件夹和小部件的主屏幕页面
- Hotseat: 屏幕底部的停靠区,包含常用应用程序
- AllAppsContainerView: 显示所有已安装应用程序的应用抽屉
- CellLayout: 工作区Workspace内的独立主屏幕页面
- ShortcutAndWidgetContainer: 在 CellLayout 中容纳应用图标、文件夹和小部件
状态管理(State Management)
Launcher 使用状态管理系统来处理不同用户界面状态之间的转换:
State | Description |
---|---|
NORMAL | 常规主屏幕显示(即首页Workspace界面) |
ALL_APPS | 应用抽屉 |
SPRING_LOADED | 正在进行拖动操作 |
OVERVIEW | 进入最近任务列表的状态 |
StateManager状态管理器协调这些状态之间的转换,管理动画并确保用户界面一致性。.
Icon System Architecture
图标系统负责加载、缓存和显示应用程序图标:
- IconCache: 管理加载和缓存应用图标以提高性能
- IconProvider: 请求来自多个来源的图标接口
- IconFactory: 创建具有适当尺寸和处理的图标可绘制对象
- IconCacheUpdateHandler: 处理应用安装/更新以刷新图标缓存
特殊图标类型包括:
- AdaptiveIcon: 标准的Android自适应图标,包含前景层和背景层
- ThemedIconDrawable: 适应系统主题的单色图标
- ClockDrawableWrapper: 动态时钟图标显示当前时间
- BadgedIconFactory: Creates icons with badges (work profile, notifications, etc.)
Widget System Architecture
Widge小部件系统管理主屏幕上小部件的选择、预览和放置:
- WidgetsContainerView: 显示小部件选择器界面
- WidgetCell: 在选择器中表示单个小部件
- WidgetPreviewLoader: 生成小部件的预览图像
- LauncherAppWidgetHost: 管理与 Android widget framework小部件框架的通信
- LauncherAppWidgetHostView: 在主屏幕上托管和渲染小部件
Widgets小部件遵循特定的生命周期:
- 用户打开小部件选择器
- 用户选择并拖动一个小部件
- 用户将小部件放在主屏幕上
- Launcher创建一个 LauncherAppWidgetHostView
- 小部件绑定到 LauncherAppWidgetHost
- 小组件在主屏幕上显示并正常运行
Launcher State Management
The launcher uses a state management system to handle different UI states:
- NORMAL: The default state showing the workspace and hotseat
- ALL_APPS: Shows the all apps grid
- SPRING_LOADED: Activated during drag operations, makes the workspace more receptive to drops
- EDIT_MODE: Allows rearranging and customizing the workspace
The StateManager
class handles transitions between these states, applying the appropriate animations and visual changes.
Drag and Drop System
One of the core features of the launcher is its drag and drop system, which allows users to rearrange items on the home screen.
The drag and drop system has these key components:
- DragController: Orchestrates the entire drag operation, from beginning to end
- DragLayer: Provides the visual layer where drag operations take place
- DragView: Visual representation of the item being dragged
- DropTarget: Interface implemented by views that can accept dropped items
当用户长按某个项目时,系统创建一个表示该项目的DragView并将其附加到DragLayer上。当用户移动手指时,DragView会跟随。当用户松开手指时,系统确定适当的放置目标并执行相应的操作。