android17 Launcher 主要文件解释
一、 核心生命周期与应用入口 (Launcher.java及其基石)Launcher.java职责主屏幕的核心 UI Activity。负责统筹整个桌面的生命周期、管理 Fragment、处理窗口焦点、分发返回键与 Home 键事件。BaseActivity.java职责Launcher 中所有 Activity如桌面Launcher、设置页等的共同基类统一封装了沉浸式、主题切换和基础生命周期回调。LauncherApplication.javaMainProcessInitializer.java职责全局 Application 类与主进程初始化器。负责在进程启动时初始化 Dagger 依赖注入容器、注册系统广播监听、拉起全局线程池。InvariantDeviceProfile.java作用设备无关的配置档案网格大小、图标大小、行列数等。核心职责根据屏幕尺寸和密度计算出最适合当前设备的网格布局参数DeviceProfile。LauncherAppState.kt职责Launcher 应用状态的全局单例持有者。负责管理LauncherModel、缓存配置并在整个应用的生命周期中提供全局共享的上下文。二、 核心 UI 容器与布局管理 (Workspace,CellLayout,Hotseat等)Workspace.java职责桌面工作区的核心容器继承自PagedView。管理多页桌面的左右滑动、图标放置、页面切换动画。CellLayout.javaShortcutAndWidgetContainer.javaMultipageCellLayout.java职责网格布局与坐标计算。CellLayout将每一页桌面划分为矩阵网格如 5x5处理图标的吸附、拖拽占位和间距计算。Hotseat.java职责底部固定栏Dock栏。管理屏幕最下方一排不随左右滑动而改变的常用应用图标。PagedView.java职责多页横向滑动视图基类。不仅 Workspace 使用它应用抽屉AllApps和预览组件也依赖它来实现平滑的分页滚动。LauncherRootView.java职责整个 Launcher 根布局的顶层 View负责处理全屏 Window Insets状态栏、导航栏避让、系统级触摸分发和全局遮罩。三、 状态机与动画核心 (statemanager/,LauncherState.java等)statemanager/核心伴侣类LauncherState.java定义 Launcher 的各种宏观状态如NORMAL正常桌面、ALL_APPS抽屉、OVERVIEW最近任务。WorkspaceStateTransitionAnimation.java处理在不同状态切换时例如从桌面拉起抽屉Workspace 和 Hotseat 的缩放、透明度及位移动画。动画与播放器控制AsyncAnimatorPlaybackController.kt异步动画播放控制器常用于手势驱动动画如用户用手指慢慢上滑进抽屉时动画进度与手指位移实时绑定。LauncherAnimUtils.javaLauncher 专用的动画工具类库。四、 数据引擎与加载 (LauncherModel.kt,LauncherProvider.java等)LauncherModel.kt职责Launcher 的数据后台引擎。负责异步从系统的PackageManager加载应用列表、小部件信息并在后台线程同步更新桌面数据库。LauncherProvider.javaLauncherSettings.java职责ContentProvider 实现。将用户在桌面上摆放的图标位置、文件夹结构、小部件配置持久化存储在 SQLite 数据库中。ModelReloader.ktModelCallbacks.kt职责模型重载器与回调。当系统语言改变、应用包发生大面积变化时通知LauncherModel重新加载数据并刷新 UI。五、 拖拽与放置系统 (dragndrop/的外围延伸)DropTarget.javaDragSource.javaButtonDropTarget.javaDeleteDropTarget.java职责定义拖拽源与放置目标的契约接口。例如用户长按图标准备拖动时是DragSource而拖到顶部的“卸载”或“移除”区域时该区域就是DeleteDropTarget。DropTargetHandler.ktBoxSelectionHelper.kt职责处理多选拖拽、框选图标以及放置时的边界命中测试和动画反馈。六、 首选项与配置管理 (LauncherPrefs.kt,DeviceProfile.java等)LauncherPrefs.ktInMemoryLauncherPrefs.kt职责统一的配置偏好管理类。替代传统的SharedPreferences提供高性能、类型安全的首选项存取支持内存缓存与持久化存储。DeviceProfile.javaGridSizeUtil.kt职责设备外形与网格尺寸画像。根据当前设备的屏幕宽度、高度、DPI 以及是否处于折叠屏展开/折叠状态动态计算图标大小、间距和网格行列数。七、 辅助工具与杂项管理BubbleTextView.java桌面上最常见的单个应用图标组件带文字、角标、长按菜单触发能力。ExtendedEditText.java带有过滤和扩展功能的输入框常用于抽屉的搜索栏。SplitScreenUiState.ktSplitSelectTask.kt分屏选择与多任务配对状态管理支持在大屏或桌面模式下将两个应用组合进入分屏。UndoDeleteController.kt处理桌面图标删除后的“撤销Undo”气泡提示逻辑。