dvm,app进程,linux进程三者关系 DVM指 dalivk 的虚拟机.每一个 Android 应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik 虚拟机实例.而每一个 DVM 都是在 Linux 中的一个进程,所以说可以认为是同一个概念 Zygote进程与app进程关系 Zygote是java层的进程即它也拥有一个独立的Dalvik 虚拟机实例,它是被linux层的第一个用户空间Init进程所启动的,它的主要作用就是用来孵化app进程和系统进程 fork一个app进程,是通过…
前言: 昨晚新版本终于发布了,但是还是记得有测试反馈app启动好长时间也没进入app主页,所以今天准备加个班总结一下App启动那些事! app的启动方式: 1.)冷启动  当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动.冷启动因为系统会重新创建一个新的进程分配给它,所以会先创建和初始化Application类,再创建和初始化MainActivity类(包括一系列的测量.布局.绘制),最后显示在界面上. 2.)热启动 当启动应用时,后台已有该…
ServiceManager启动分析   简述: ServiceManager是一个全局的manager.调用了Jni函数,实现addServicew getService checkService listService等函数, Server进程先注册一些service到SercviceManager中. Client想获得一些service,就要到Service中去获取该Service. 这样,Server和Client之间就可以进行通讯了, Server和Client之间的通讯都是通过Bi…
Init 是所有Linux程序的起点,而Zygote于Android,正如它的英文意思,是所有java程序的'孵化池'(玩过星际虫族的兄弟都晓得的).用ps 输出可以看到 >adb shell ps | grep -E 'init|926' root 1 0 656 372 00000000 0805d546 S /init root 926 1 685724 43832 ffffffff b76801e0 S zygote system 1018 926 795924 62720 ffffff…
本文依据Android6.0源码,从点击Launcher图标,直至解析到MainActivity#OnCreate()被调用. Launcher简析 Launcher也是个应用程序,不过是个特殊的应用.俗称“桌面”.通过PackageManagerService查询所有已安装的应用程序,并保存相应的图标.应用名称.包名和第一个要启动的类名等. 源码位置:frameworks/base/core/java/android/app/LauncherActivity.java LauncherActi…
这一章我们通过MediaPlayerService的注冊来说明怎样在Native层通过binder向ServiceManager注冊一个service,以及client怎样通过binder向ServiceManager获得一个service,并调用这个Service的方法. Native Service的注冊 这里以MediaPlayerService举例来说明怎样在Native层注冊Service,首先来看main_mediaservice.cpp的main方法: int main(int a…
Android系统--Binder系统具体框架分析(二)Binder驱动情景分析 1. Binder驱动情景分析 1.1 进程间通信三要素 源 目的:handle表示"服务",即向实现该"服务"的进程发送数据:handle是"服务"的引用 int binder_call(struct binder_state *bs, struct binder_io *msg, struct binder_io *reply, uint32_t target,…
对于 ContentProvider 还不是很熟悉的同学,可以阅读上一篇 Android ContentProvider 基本原理和使用详解.本文主要是对 contentProvider 的源码进行分析,从而了解 ContentProvider 的实现原理. 本文分析基于 android 10 的源码, API 级别 29.  ContentProvider 启动流程 ContentProvider (CP) 启动流程图如下:可以对着这个来阅读下面的内容. 1.ActivityThread.ha…
一.前言 目前有很多的业务模块提供了Deeplink服务,Deeplink简单来说就是对外部应用提供入口. 针对不同的跳入类型,app可能会选择提供不一致的服务,这个时候就需要对外部跳入的应用进行区分.一般来讲,我们会使用反射来调用Acticity中的mReferrer字段来获取跳转来源的包名. 具体代码如下: /** * 通过反射获取referrer * @return */ private String reflectGetReferrer() { try { Field referrerF…
Android系统启动过程分析 Android系统的框架架构图如下(来自网上):   Linux内核启动之后----->就到Android的Init进程 ----->进而启动Android相关的服务和应用. 整个的启动过程如下图所示: 以下针对Android 4.2内核代码的启动部分进行分析. Init进程,是一个由内核启动的用户级进程.内核自行启动(已被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动用户级程序init的方式,完成引导进程. Init进程始终是第…