小米01月第三周工作记录 工作记录
小米01月第三周工作记录
01.20
对于 Android 应用程序,使用标准的 Java 编译器编译出 Class 文件,但最终 APK 文件中包含的却是 dex 类型的文件。dex 文件是将所需的所有 Class 文件重新打包。 打包的不是简单地压缩,而是完全对 Class 文件内部的各种函数表,变量表等进行优化,并产生一个新的文件,就是 dex 文件。
由于 dex 文件是一种经过优化的 Class 文件,因此加载这样特殊的 Class 文件需要特殊的类加载器 DexClassLoader ,Android SDK 提供了 DexClassLoader 类就是出于这个目的。
JNI,一般三种情况需要C/C++语言协助
-
调用驱动。一般操作系统所提供的驱动都是C接口,Java 语言本身不具备操作这些驱动的能力。
-
大数据处理。C语言校园较高。
-
已有现成模块,想重用 C 代码。
JAVA 访问 C
java 要做的只是声明某个函数为 native 函数即可。 java会去哪找native函数呢?
如 java 中, private native final void init()
对应的是 static void android_content_AssetManager_init(JNIEnv* env, jobject clazz)
。即后者等于包名加前者的名称,以下划线分隔。这种映射关系也是程序员可以改变的。 参数 clazz
是指调用该方法的对象。
01.22
异步消息处理线程,线程启动后进入一个无限循环体,每循环一次,从其内部的消息队列中取出一个消息,并做处理。
ThreadLocal a 类型 , 提供一种作用域为线程的变量定义,“线程局部存储”。static
的作用域则是进程。
一个异步线程只能有一个消息队列,所以也就只能有一个 Looper 对象。 Looper.prepare()
中 new 一个 Looper 对象, Looper对象的构造函数中 new 一个 MessageQueue 。然后调用 Looper.loop()
循环取消息。消息的实体类 Message ,用一个数据池维护。
Android 的系统进程对应的 TCP 端口地址为 8600.
blog comments powered by Disqus