当前位置: 首页 > news >正文

Android中Launcher简介

一、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渲染界面到屏幕,完成显示。”


文章转载自:
http://career.wjrtg.cn
http://backslidden.wjrtg.cn
http://bleeding.wjrtg.cn
http://arbalist.wjrtg.cn
http://arbitress.wjrtg.cn
http://berceuse.wjrtg.cn
http://buntons.wjrtg.cn
http://amyotonia.wjrtg.cn
http://amortizement.wjrtg.cn
http://aprosexia.wjrtg.cn
http://barbarization.wjrtg.cn
http://aristarch.wjrtg.cn
http://carload.wjrtg.cn
http://cavefish.wjrtg.cn
http://brittonic.wjrtg.cn
http://butanol.wjrtg.cn
http://assay.wjrtg.cn
http://binocle.wjrtg.cn
http://burgoo.wjrtg.cn
http://aristotelian.wjrtg.cn
http://alveolus.wjrtg.cn
http://bridgeboard.wjrtg.cn
http://ataraxy.wjrtg.cn
http://abandonee.wjrtg.cn
http://biologically.wjrtg.cn
http://amygdalate.wjrtg.cn
http://carny.wjrtg.cn
http://balistraria.wjrtg.cn
http://bigwig.wjrtg.cn
http://beside.wjrtg.cn
http://www.dtcms.com/a/280901.html

相关文章:

  • 【SOA用于噪声抑制】光纤DFB激光器中弛豫振荡噪声抑制
  • Android原生Dialog
  • 关于我用AI编写了一个聊天机器人……(番外1)
  • 博客项目 laravel vue mysql 第六章 文章功能
  • PHP:从入门到实战的全面指南
  • 【PTA数据结构 | C语言版】构造二叉树
  • python原生处理properties文件
  • curl请求一直等待但是postman访问正常的问题处理
  • 视频HDR技术全解析:从原理到应用的深度探索
  • IDEA中删除多余的jdk选项 【IDEA2024版】
  • 企业培训视频如何做内容加密防下载防盗录(功能点整理)
  • 零信任安全架构:如何在云环境中重构网络边界?
  • Wing FTP服务器漏洞正遭活跃利用,CVSS评分10分
  • 设计模式之对象池模式
  • 说下对mysql MVCC的理解
  • 深入理解设计模式之外观模式:简化复杂系统的艺术
  • 经典排序算法之希尔排序
  • RTL编程中常用的几种语言对比
  • c#泛型集合
  • Azure FXmsv2 系列与 Azure FXmdsv2 系列虚拟机正式发布
  • Docker 部署emberstack/sftp 镜像
  • JavaScript进阶篇——第四章 解构赋值(完全版)
  • Scrapy扩展深度解析:构建可定制化爬虫生态系统的核心技术
  • 500+技术栈覆盖:Web测试平台TestComplete的对象识别技术解析
  • C#,List<T> 与 Vector<T>
  • 构建强大的物联网架构所需了解的一切
  • Linux下编译海思WS63 SDK全攻略
  • 数据结构:线性表
  • 服务器端安全检测与防御技术概述
  • BGP机房和传统机房之间都有哪些区别?