首页 > 其他分享 >Android Launcher启动过程

Android Launcher启动过程

时间:2024-08-27 12:25:41浏览次数:14  
标签:启动 Launcher 创建 ActivityThread 线程 Activity 进程 Android

## Launcher的启动流程:
 1.Zygote进程 –> SystemServer进程 –> startOtherService方法 –> ActivityManagerService的systemReady方法 –> startHomeActivityLocked方法 –> ActivityStackSupervisor的startHomeActivity方法 –> 执行Activity的启动逻辑,执行scheduleResumeTopActivities()方法。。。。
 2.因为是隐士的启动Activity,所以启动的Activity就是在AndroidManifest.xml中配置catogery的值为:
 public static final String CATEGORY_HOME = "android.intent.category.HOME";
可以发现android M中在androidManifest.xml中配置了这个catogory的activity是LauncherActivity,所以我们就可以将这个Launcher启动起来了
 3.LauncherActivity中是以ListView来显示我们的应用图标列表的,并且为每个Item保存了应用的包名和启动Activity类名,这样点击某一项应用图标的时候就可以根据应用包名和启动Activity名称启动我们的App了。

> 安装APP包的流程
PMS 解析Manifest流程:Zygote进程 –> SystemServer进程 –> PackgeManagerService服务 –> scanDirLI方法 –> scanPackageLI方法 –> PackageParser.parserPackage方法;

> UILoop消息线程
  UI线程的ActivityTread中的Main方法已经使用Looper.prepareMainLooper为该线程添加了Looper对象,即已经为该线程创建了消息队列MQ,而普通线程Thread只是一个裸线程而已(可以联想一下AsyncTask将普通线程变为LOOP线程的过程)。从ActivityThread的Main()——>ActivityThread—-- UILoop循环处理:
(1)首先ActivityThread的Main()执行,调用调用prepareMainLooper()为UI线程创建消息队列(MessageQueue),
(2)然后创建一个ActivityThread对象,期间会创建俩个对象Handler(处理消息队列),ApplicationThread(Binder)对象(接收远程Ams的IPC调用)
(3)UI主线程调用Looper.loop()进入消息循环体,当接收到Ams发送start某个Activity后将会创建指定的Activity对象,Actvity又会依次创建创建PhoneWindow类,DécorView类,创建View/ViewGroup
(4)最后调用WindowManager类(创建好的界面显示到屏幕)

> 点击Logo启动APP(AMS,ActivityThrad)
   ActivityThrad创建进程,fork进程的复制,SystemThread? ActivityThread和ApplicationThread?
 在android.app包下有Instrumentation这个类,这个类没有继承和实现其它的任何类,也没被其它的类继承.会在应用的任何代码执行前被实列化,用来监控系统组件与应用的交互过程,其实就是很多操作封装一下,由它来完成实现. Instrumentation另一个重要作用是提供Android组件单元测试.   
 每一个应用进程中只有唯一的Instrumentation, 在ActivityThread中成员变量Instrumentation mInstrumentation,通过方法public Instrumentation getInstrumentation()来获得.

-- Binder
 ActivityManagerProxy与ActivityManagerService是一对Binder;ApplicationThread与ActivityThreadProxy是一对Binder.
 App与AMS通过Binder进行IPC通信,AMS(SystemServer进程)与zygote通过Socket进行IPC通信。
 在Android系统中,任何一个Activity的启动都是由AMS和应用程序进程(主要是ActivityThread)相互配合来完成的。AMS服务统一调度系统中所有进程的Activity启动,而每个Activity的启动过程则由其所属的进程具体来完成。 

Android系统启动流程(四)Launcher启动过程与系统启动流程- http://blog.csdn.net/itachi85/article/details/56669808
Android应用框架浅析- http://blog.csdn.net/yanbober/article/category/3206943
Launcher启动流程- http://blog.csdn.net/qq_23547831/article/details/51112031

标签:启动,Launcher,创建,ActivityThread,线程,Activity,进程,Android
From: https://blog.csdn.net/wenwang88/article/details/141599658

相关文章

  • Android开发 - LayoutInflater 类将 XML 布局文件转换成对应的 View 对象解析
    LayoutInflater是什么LayoutInflater用于将XML布局文件转换成对应的View对象。它可以理解为一个“布局解析器”,帮助我们将静态的XML文件转换为可以动态操作的Java对象(View及其子类)LayoutInflater的主要作用在Android开发中,我们通常会在res/layout文件夹中......
  • Android开发
    开发工具AndroidStudio软件官网地址:https://developer.android.google.cn/studio#项目构建工具介绍Gradle和Maven都是Java项目的构建工具,但它们有一些区别:1.语法:Gradle使用Groovy语言进行编写,而Maven使用XML。Groovy更加灵活易读,XML更加严谨易于重用。2.性能:Gradle比Maven......
  • Android开发 - BluetoothDevice 类蓝牙连接、通信以及获取设备信息解析
    BluetoothDevice是什么BluetoothDevice是用于表示远程蓝牙设备的类。它提供了与设备进行连接、通信以及获取设备信息的功能。在蓝牙通信中,BluetoothDevice对象代表一个实际的物理设备,比如蓝牙耳机、智能手表、蓝牙音箱等BluetoothDevice的主要作用获取蓝牙设备的信息通......
  • C#上位机开发——多线程启动停止暂停继续
    引用:上位机开发——多线程启动停止暂停继续-哔哩哔哩(bilibili.com)前言初学者学习编程时,很容易因为多线程出现各种问题,导致不敢使用多线程。但是多线程技术在做开发中,是不可忽视的一个技术,基本上我们实际应用中,每个项目都会使用多线程,所以多线程技术必须掌握。为什么要用多......
  • zookeeper 集群搭建 及启动关闭脚本
    1准备奇数台机子3,5,7   我准备的是三台192.168.58.81 zookeeper-1192.168.58.82 zookeeper-2192.168.58.83 zookeeper-3下载jdk 把他配置环境变量并检查是否是环境变量 echo$JAVA_HOMEcd/opt/software wgethttp://mirrors.hust.edu.cn/apache/zooke......
  • Android开发 - StringBuilder 类处理字符串解析
    StringBuilder是什么StringBuilder是Java中用于处理字符串的一个类。相较于String类,它更高效,尤其是在需要频繁修改字符串内容的场景下String的不可变性String是不可变的,也就是说,一旦创建了一个String对象,它的内容就无法再改变了。例如,执行以下代码时:Stringstr......
  • Spring Boot 3 中的性能优化:更快的启动时间和更低的内存占用
    随着微服务架构的普及,SpringBoot因其简洁的配置和快速的开发周期,成为了众多开发者的首选框架。然而,随着应用规模的增大和复杂度的提升,如何优化SpringBoot应用的启动时间和内存占用成为了一个重要的课题。本文将探讨在SpringBoot3中可以采取的一些性能优化措施,以实现......
  • 《欧洲卡车模拟2》游戏启动时闪退提示缺少Core_ets2mp.dll文件怎么解决?欧卡2游戏崩溃
    在玩《欧洲卡车模拟2》时,游戏启动时出现闪退,并提示缺少Core_ets2mp.dll文件,这着实令人困扰。玩家可以尝试重新安装游戏、更新驱动程序,或者从可靠来源获取该文件并正确放置,以解决这一问题。本篇将为大家带来《欧洲卡车模拟2》游戏启动时闪退提示缺少Core_ets2mp.dll文件怎么解决......
  • 卡关?风灵月影启动!《黑神话:悟空》风灵月影四十二项修改器预览(含下载地址)
    危!天命人速归!《黑神话:悟空》现已正式发售,风灵月影宗的弟子们,翘首以盼的时刻终于到来!下面就位大家带来直面天命的神器,助你在神话世界中所向披靡!《黑神话:悟空》风灵月影四十二项修改器https://download.csdn.net/download/Vernon_218/89632504第一步:下载修改器。第二步:下载完......
  • 《黑神话:悟空》提示Steam_API.dll缺失?六种方案解决游戏启动障碍
    Steam_API.dll是一个与Steam平台相关的动态链接库(DLL)文件,通常与使用SteamAPI的游戏或应用程序的功能实现有关。这个DLL文件包含了一些Steam平台功能的辅助函数,例如成就系统、云存储、社交功能等,对于确保游戏或应用程序的正常运行非常重要。当Steam_API.dll文件缺失时,可能......