android进程启动的serverThread线程配置文件分析及案例分析-苏州安嘉

  • A+
所属分类:石雕狮子
摘要

android中每个应用都运行在一个DVM实例里,而每个dvm实例都是一个独立的进程空间;当手机启动时,linux内核初始化完成后会创建并运行一个init进程

Android中的每个应用程序都运行在一个DVM实例中,每个DVM实例都是一个独立的进程空间; 手机启动时,Linux内核初始化完成后会创建并运行一个init进程,然后由init进程对系统进行初始化。 操作读取init脚本,初始化各种服务。 zygote进程是从脚本的服务通知init进程创建的。 起初,zygote进程只是被命名为app_process进程。 经过一系列代码修改为zygote进程,这样zygote进程就成为了所有app进程的父进程;

Zygote 本身就是一个应用程序。 zygote进程创建完成后,启动zygote进程,创建虚拟机实例,在虚拟机实例中注册jni方法,完成系统框架库的加载和预设类库的加载,然后调用startSystemServer( ) 启动一个后台服务进程,最后创建一个socket服务并进入循环,等待其他进程服务(如AMS/WMS/PMS等)的请求;

zygote通过startSystemServer()->Zygote.forkSystemServer()孵化(fork)system_server进程,然后syetem_server进程启动一个serverThread线程。 该线程主要负责启动android平台中的各种服务,比如android核心服务:ActivityManagerService(AMS)、PacketManagerService(PMS)、WindowManagerService(WMS); 蓝牙服务; 电池服务; 通信相关(wifi、电话)服务; 系统相关功能服务AudioService、usb-service; 状态栏、通知服务、剪贴板服务、日志存储管理服务、性能统计系统中的所有服务,比如管理服务,基本都是由它来启动的,而且服务必须注册到serverManager上,这就涉及到binder机制通信。另外,system_server进程通过启动的PMS调用scanDirLI()扫描手机上5个目录下的apk文件。 目录如下

虚拟图标运行机是什么_虚拟图标怎么设置_虚拟机运行图标是那个

/系统/框架

/系统/应用程序

/供应商/应用程序

虚拟机运行图标是那个_虚拟图标怎么设置_虚拟图标运行机是什么

/数据/应用程序

/数据/应用程序私有

获取apk格式的应用程序文件,调用parsePackage()全面解析apk中的androidManifest.xml配置文件,并将配置文件中的activity、service、broadcast、contentprovider等整个应用程序信息保存到PMS收集mpkgs(pkgname,pkg ),安装完成。 此时的申请相当于在PMS中完成了注册。 如果您想在手机界面上看到该应用程序虚拟机运行图标是那个,则需要从PMS通过Home应用程序将已安装的应用程序以快捷方式图标显示在桌面上。

虚拟图标怎么设置_虚拟图标运行机是什么_虚拟机运行图标是那个

当点击桌面快捷图标打开应用程序时,AMS调用startProcessLocked()将应用程序进程启动参数写入LocalSocket,通过LocalSocket进行连接,并通过Zygote.fofkAndSpecialize()通知zygote进程创建新的应用程序进程。 创建完成后, RuntimeInit.invokeStaticMian( ) 使用ActivityThread作为新程序的主入口。 这个ActivityThread是App的主入口,也是主线程。 整个过程大概是这样的。

init进程是用户空间的第一个进程,也是所有应用程序空间进程的父进程。 也就是说,应用程序空间中的所有进程都是由init通过folkandspecify()直接或间接fork出来的。

zygote 进程分叉(复制)自身以尽快提供系统。 对于一些只读系统库,所有虚拟机实例都与zygote共享一块内存区域。 所有应用程序进程都是通过 zygote 进程创建的。 该进程具有与zygote基本相同的虚拟机实例和共享内存数据

虚拟图标运行机是什么_虚拟机运行图标是那个_虚拟图标怎么设置

如果zygote或者system_server进程发生异常,init会重新创建这两个进程。

我们来讨论一下,APK dex文件什么时候被解析并转换成odex或者oat文件?

另外,通过 PMS 安装应用程序时,APK 中的 dex 文件

虚拟机运行图标是那个_虚拟图标运行机是什么_虚拟图标怎么设置

DVM环境下:通过opt工具将主要的classes.dex优化为odex文件。 准备就绪后才算安装完成。 注意:除了classes.dex文件外,其他dex文件不会被加载。 这是multidex的用户。

AVM环境下:直接使用dex2oat()方法虚拟机运行图标是那个,然后调用DexFile类中的方法对所有dex文件进行验证和优化,最终生成oat可执行文件。 oat文件是本地机器代码,因此AVM可以直接执行,不需要DVM。 每次运行都必须解释odex文件以生成本地机器代码,因此AVM速度更快并节省运行时间。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: