查看: 30|回覆: 0

[教程] Android中Launcher简介及启动流程原理

[複製鏈接]

3

主題

0

回帖

0

積分

热心网友

金币
0
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2012-6-26
發表於 2025-7-16 09:37:50 | 顯示全部樓層 |閲讀模式

一、Launcher概述与应用图标显示原理

1. Launcher的双重角色

  • 系统入口:响应点击事件,启动其他应用(通过Intent触发AMS)。

  • 桌面管理器:显示已安装应用的图标(从PackageManagerService获取应用信息)。

2. 应用图标数据加载流程

关键步骤

  1. 数据加载(子线程):

    • loadWorkspace():从数据库加载桌面布局(单元格位置、小部件等)。

    • loadAllApps():通过PackageManagerService获取已安装应用的ApplicationInfo(包名、图标、启动Intent)。

  2. 视图绑定(主线程):

    • bindAllApplications():将应用列表数据传递给AllAppsContainerView

    • setApps():更新RecyclerViewAdapter,触发图标渲染。

3. 关键类作用

类名职责面试考点
LauncherModel异步加载应用/桌面数据工作线程与主线程协作机制
LoaderTask执行数据加载的Runnable任务避免主线程阻塞
IconCache缓存应用图标(避免重复解析)性能优化关键点
AllAppsRecyclerView显示应用列表的滚动视图复用机制提升性能

二、Launcher启动流程原理

1. 系统启动阶段的Launcher加载

步骤解析

  1. 触发时机SystemServer启动完成后调用AMS.systemReady()

  2. Home Intent生成:创建包含CATEGORY_HOME的Intent(目标为Launcher)。

  3. 启动Launcher:若未运行则通过ActivityStarter启动Launcher主Activity。

2. 点击图标启动新应用

关键流程

  1. 跨进程通信:Launcher通过Binder调用AMS.startActivity

  2. 进程创建:AMS通过Socket通知Zygote fork新进程(非Binder因避免死锁)。

  3. 应用初始化

    • ActivityThread.main():初始化主线程Looper、Application。

    • AMS.attachApplication():建立Binder链接,通知启动Activity。

  4. Activity生命周期:依次调用onCreate()onStart()onResume(),触发视图绘制。

三、问题总结

请描述从点击桌面图标到应用显示的全过程
回答:

“该过程分为 Launcher响应 和 应用启动 两个阶段:
1. Launcher端

  • 点击图标触发startActivity(),生成包含FLAG_ACTIVITY_NEW_TASK的Intent。

  • 通过Binder向AMS发送请求,AMS记录ActivityRecord并检查目标进程是否存在。

2. 系统调度端

  • 进程不存在:AMS通过Socket通知Zygote fork新进程 → 加载ActivityThread.main() → 初始化Application和主线程Looper。

  • 进程存在:直接复用。

  • AMS通过ApplicationThread代理调度目标Activity的生命周期(onCreate()onResume())。

3. 应用端

  • ActivityThread处理LAUNCH_ACTIVITY消息 → 反射创建Activity实例。

  • 执行setContentView()onResume() → 触发ViewRootImpl执行Measure/Layout/Draw三阶段绘制。

  • 通过SurfaceFlinger渲染界面到屏幕,完成显示。”

到此这篇关于Android中Launcher简介的文章就介绍到这了,更多相关Android Launcher简介内容请搜索琼殿技术社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持琼殿技术社区!

您可能感兴趣的文章:
  • Android开发Launcher进程启动流程
  • AndroidStudio替换项目图标ic_launcher操作
  • android Launcher3设置默认桌面应用
  • Android开发实现Launcher3应用列表修改透明背景的方法
  • Android的Launcher启动器中添加快捷方式及小部件实例
  • Android实现向Launcher添加快捷方式的方法
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部