代码改变世界

随笔分类 -  《深入理解Android》之笔记

《深入理解Android(卷2)》笔记 7.第四章 深入理解PackageManagerService

2013-06-05 21:27 by ...平..淡..., 3146 阅读, 收藏,
摘要: 知识点1:PKMS启动流程SystemServer.java::ServerThread::run--->PKMS::main--->PKMS::构造函数如下,在PKMS的main函数中将PKMS服务添加到到ServiceManager中。public static final IPackageManager main(Context context, boolean factoryTest, boolean onlyCore) { PackageManagerService m = new PackageManagerService(context, factoryTest, . 阅读全文

由学习SystemServer引发的extern "C "探究

2013-01-07 13:58 by ...平..淡..., 466 阅读, 收藏,
摘要: 在学习SystemServer时,根据函数调用发现,从SystemServer.java::main--->init1--->com_android_SystemServer.cpp::android_server_SystemServer_init1--->system_init时,system_init函数在cpp文件的最上面声明了extern "C" int system_init();但是没有包含头文件啊之类的,那系统是如何找到system_init函数的呢?上网查了一些资料,发现《条件编译和extern "C"的用法总结》文章 阅读全文

《深入理解Android(卷2)》笔记 6.第二章 深入理解Java Binder

2013-01-04 23:43 by ...平..淡..., 1712 阅读, 收藏,
摘要: 只学习了这一章中与Binder有关的部分。因为这一部分涉及java层的Binder机制,所以就直接来学习下。先整体总结下:1.AMS如何将自己注册到SM中(1)AMS.setSystemProcess--->SM.addService--->getIServiceManager().addService() (2)分析getIServiceManager函数 getIServiceManager--->SMN.asInterface(BinderInternal.getContextObject()) (3)分析getContextObject函数 ge... 阅读全文

《深入理解Android(卷1)》笔记 5.第六章 深入理解Binder

2013-01-04 09:10 by ...平..淡..., 2177 阅读, 收藏,
摘要: 第六章 深入理解Binder我的简要总结:根据MediaServer的main函数来分析Main_mediaserver.cpp::main int main(int argc, char** argv){ sp<ProcessState> proc(ProcessState::self()); //(1) 获得一个ProcessState实例 sp<IServiceManager> sm = defaultServiceManager();//(2) 调用defaultServiceManager,得到一个IserviceManager LOGI("Serv 阅读全文

《深入理解Android(卷1)》笔记 4.第四章 深入理解zygote

2012-12-17 10:19 by ...平..淡..., 1995 阅读, 收藏,
摘要: 第4章 深入理解zygote知识点1:zygote分析关于zygote这一部分,我对它的流程归纳如下:(1) app_main.cpp类的main方法,调用AppRuntime类的start方法。(2) 该start方法执行3个过程: (2.1)创建虚拟机:调用startVm方法。 (2.2)注册JNI方法:调用startReg方法。 (2.3)通过JNI调用java方法:env->callStaticVoidMethod方法。分析(2.1) 该方法确定了一些参数,用于创建虚拟机(调用JNI_createJavaVM方法创建虚拟机)(2.2) 为了让java世界使用native方法,所以 阅读全文

《深入理解Android(卷1)》笔记 3.第三章 深入理解init

2012-12-03 17:00 by ...平..淡..., 888 阅读, 收藏,
摘要: 知识点7:属性服务(与注册表机制机制类似)在init.c中和属性服务相关的代码如下://调用property_init_action方法,该方法调用property_init方法queue_builtin_action(property_init_action, "property_init");//调用property_service_init_action方法,该方法会调用start_property_service方法queue_builtin_action(property_service_init_action, "property_service_in 阅读全文

《深入理解Android(卷1)》笔记 2.第三章 深入理解init

2012-11-30 13:13 by ...平..淡..., 1467 阅读, 收藏,
摘要: 重拾书本...作者是基于2.2源码分析的,由于我参照的是2.3,有些方法略有不同,我按照2.3的来总结,不过会在不同的地方标记下。第三章 深入理解init知识点1:init概述init是一个进程,而且是Linux系统中用户空间的第一个进程。主要工作概述为:(1)init负责创建系统中的几个关键进程,包括zygote。(2)init提供property service(属性服务)来管理Android系统的属性。这一章是从init如何创建zygote和 init的属性服务如何工作两个方面分析init。知识点2:init工作流程(精简)(1)解析两个配置文件 (init.rc 和 init.hard 阅读全文

《深入理解Android(卷1)》笔记 1.第二章 深入理解JNI

2012-09-08 00:31 by ...平..淡..., 978 阅读, 收藏,
摘要: 第一章就跳过了,比较基础。第二章 深入理解JNI知识点1:JNI概述JNI:Java Native Interface,中译为“java本地接口”。Native语言一般指C/C++。JNI技术可以实现java与C/C++之间的互通(java程序<----调用---->C/C++程序)。虽然java语言是平台无关的,但JNI的推出基于以下几个方面的考虑:(1)java虚拟机是Native语言写的,所以虚拟机本身是平台相关的。而有了JNI技术,就可以对java层屏蔽不同操作系统间的差异了。java程序只管通过调用Native方法实现相应功能就行,无需理会平台差异,就实现了java本身的 阅读全文