我是靠谱客的博主 震动蚂蚁,最近开发中收集的这篇文章主要介绍Android再进阶之Launcher启动过程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

系统启动的最后一步,就是启动一个应用程序来显示已经安装的应用程序,而这个应用程序就是Launcher。

Launcher启动过程中,会请求PackageManagerService返回系统中已经安装的应用程序的信息,并且将这些信息封装成一个快捷图标列表显示在系统屏幕上。
简单来说,Launcher就是系统的桌面,它主要有下面两个作用:

  • 作为Android系统的启动器,用于启动应用程序。
  • 作为Andorid系统的桌面,用于显示和管理应用程序的快捷图标或者其他桌面组件。

Launcher的启动过程如下:

  1. SystemServer进程在启动的过程中会启动PackageManagerService,它会将系统中的应用程序安装完成。在此之前,已经启动的AMS会将Launcher启动起来。
  • Launcher的入口为AMS的systemReady方法,而它在SystemServer的startOtherServices方法中被调用。
  • 看一下调用关系:
    SystemServer的startOtherServices() -> systemReady() ->resumeFocusedStackTopActivityLocked() -> resumeTopActivityUncheckedLocked() -> resumeTopActivityInnerLocked() -> resumeHomeStackTask() -> startHomeActivityLocked()
  • 晕了。系统的运行模式分为三种:工厂模式、低级工厂模式和高级工厂模式。需要注意:Launcher的Action需要为Intent.ACTION_MAIN,Category需要为Intent.CATEGORY_HOME。
  1. 图标显示。
  • Launcher的onCreate()方法中在传入LauncherAppState的实例,调用setLauncher方法,并且传入Launcher对象。
  • setLauncher方法会调用LauncherModel的initialize方法,这个方法会将传入的Callbacks也就是Launcher封装成一个弱引用对象。
  • onCreate方法中调用LauncherModel的startLoader方法,它创建具有消息循环的线程HandlerThread对象,创建Handler并传入Handler的Looper.创建LoaderTask,将LoaderTask作为消息发送给HandlerThread。
  • LoaderTak是LauncherModel的内部类,包含加载和绑定工作区信息的loadWorkspace和bindWorkspace方法,以及加载系统已经安装的应用程序信息的loadAllApps方法。
  • Launcher的bindAllApplication方法会调用AllAppsContainerView类型的mAppView对象的setApps方法,将信息设置给mApps。
  • mApps是AlphabeticalAppsList类型的对象,它包含会在AllAppsContainer加载完XML布局时调用的onFinishInflate方法,使用AllAppsRecyclerView来显示App列表,并且将mApps设置进去,然后为AllAppsRecyclerView设置Adapter(就像我们使用ListView和RecyclerView这些一样,设置adapter),之后,就可以正常显示应用图标了。

最后

以上就是震动蚂蚁为你收集整理的Android再进阶之Launcher启动过程的全部内容,希望文章能够帮你解决Android再进阶之Launcher启动过程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部