现在的位置: 首页 > 综合 > 正文

Android runtime

2018年04月17日 ⁄ 综合 ⁄ 共 1393字 ⁄ 字号 评论关闭

Class Overview

Allows Java applications to interface with the environment in which they are running. Applications can not create an instance of this class, but they can get a singleton instance by invoking getRuntime().

     AndroidRuntime 是android中一个很重要的组成部分,引导系统(init)会调用到AndroidRuntime 中的start函数,在这个函数里完成启动android的一切工作。

 1、首先会创建一个信号管道(blockSigpipe),在这个函数中首先初始化了一个信号集(指针为mask),之后将SIGPIPE设置到这个信号集中,最后作一次信号集的遮罩(联级)。

 2、设置默认的系统根目录,如果在环境变量(ANDROID_ROOT)中有设置,则以设置为准,否则默认/system为系统根目录。

 3、调用startVm启动android 虚拟机。在这个函数里面主要是对一些参数的解析,和变量的初始化。如虚拟机的运行模式,是否检查dex校验和,设置默认语言类型等等。当这一切都准备就绪了,调用JNI_CreateJavaVM来创建运行JavaVM。如果运行失败,则直接释放所有相关资源,并退出。否则返回一个带入参数
JNIEnv* env。

 4、得到env之后,标志着javaVM已经可以初始化完毕了,此时开始注册android的native函数。当然此时不是真正的要将所有函数都注册进来,只不过是注册了一个用于注册的回调函数(javaCreateThreadEtc)而已。

 5、正式开始启动VM(该线程将一直运行下去,直到VM退出),此时是一个标准的C程序加载java的方法,首先将java的类(诸如com.x7.program.test这样形式的类)名转变为目录形式(com/x7/program/test),然后开始找这个文件是否存在。找到之后开始查找运行入口(main),一切OK之后调用这个入口函数,运行java程序。而这个关键的入口类就是com.android.internal.os.RuntimeInit。

 6、其实在第5步最后的时候线程是否退出已经取决于所调用的java程序了,如果退出,则运行到本步,分别调用DetachCurrentThread以及DestroyJavaVM的函数释放这个线程(运行Java的线程),然后释放所有相关的资源。

 

对Java开发者而言,最有关系的信息是Android Runtime:

1、Android包括一组核心库(core libraries),他提供了
Java 编程语言的核心库中大多数可用功能。

2、每个
Android 应用程序运行在自己的进程上,有自己的 Dalvik 虚拟机实例
Dalvik这样是为了使一个设备可以有效地运行多个虚拟机。 Dalvik VM 以被优化占用最小内存的Dalvik Executable (.dex)格式执行文件。VM 是基于寄存器的,并通过一个 Java 语言编译器的编译来运行,而这个Java编译器已经被内置的"dx"工具转成.dex 格式。

3、Dalvik MicrosoftVM 依赖 Linux 内核获得基本功能,如线程处理和低层内存管理。

 

抱歉!评论已关闭.