深入理解Android的笔记(21)

>我来写笔记

按有用程度 按页码先后 最新笔记

  • RednaxelaFX

    RednaxelaFX (Script Ahead, Code Behind)

    在分析zygote创建虚拟机的时候,我们说过系统默认设置的Java虚拟机堆栈最大为16MB “堆栈”在大陆计算机科学术语指的是stack,是“栈”,但这里作者想说的是heap,是“堆”。我果然还是很不喜欢看到“堆栈”这个词,太容易弄混了。这不,作者都把自己弄混了。 本书分析的Android Froyo还没有对Large Heap的支持。从Android 3.0 Honeycomb开始可以通过在AndroidManifest配置里加上android:largeHeap="true"来使用更大...

    2013-08-05 11:35   2人喜欢

  • ax003d

    ax003d (Robert)

    MediaScanner (Java) <=> libmedia_jni.so (JNI) <=> libmedia.so (Native) /代码内容已省略/ h2. 注册 JNI 函数 1. 静态注册 * 编写 Java 代码,生成 .class 文件 * javah -o output packagename.classname # 生成 output.h 头文件 2. 动态注册 将函数名、签名信息、函数指针保存在一个结构体当中,通过调用 RegisterNatives 完成注册 h2. Java 与 JNI 之间的类..

    2013-09-25 16:49   1人喜欢

  • RednaxelaFX

    RednaxelaFX (Script Ahead, Code Behind)

    先看第21页里的一段范例代码: jclass clazz = (*env)->FindClass(env, className); 再看第25页引用的一段代码: jclass mediaScannerClientInterface = env->FindClass("android/media/MediaScannerClient"); 我相信肯定有不熟悉JNI的读者会很纳闷:为啥有时候是: /代码内容已省略/ 而有时候是: /代码内容已省略/ 两者到底有啥...

    2013-08-05 12:24   1人喜欢

  • RednaxelaFX

    RednaxelaFX (Script Ahead, Code Behind)

    需要解释一下静态方法中native函数是如何找到对应的JNI函数的。其实,过程非常简单: 当Java层调用native_init()函数时,它会从对应的JNI库中寻找Java_android_media_MediaScanner_native_init函数,如果没有,就会报错。如果找到,则会为这个native_init和Java_android_media_MediaScanner_native_init建立一个关联关系,其实就是保存JNI层函数的函数指针。以后再调用native_init函数时,直接使用这个函数指针久可以了,当然这项...

    2013-08-05 10:24   1人喜欢

  • RednaxelaFX

    RednaxelaFX (Script Ahead, Code Behind)

    图1-2 Java世界和Native世界交互 然后下面: 一般而言,Java世界经由JNI层通过IPC方式与Native世界交互,而Android平台上最为神秘的IPC方法就是Binder了,第6章将详细分析Binder。 这图里在“JNI层”与“Native世界”之间用“进程间通信”的箭头联系了起来。实际上Java代码通过JNI与native代码的交互很多都是在同进程内的,并不涉及进程间通信。相信作者原本就很清楚这点,但写书的时候一下给想漏了。

    2013-08-04 15:54

  • RednaxelaFX

    RednaxelaFX (Script Ahead, Code Behind)

    既然要讲JNI的东西了,开场部分如果能先给出JNI的“定义”性资料会更好些。 Java SE 5的JNI规范:http://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/jniTOC.html Java SE 6的JNI规范:http://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/jniTOC.html Java SE 7的JNI规范:http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html Android Froyo所支持的JNI应该是基于Java SE 5...

    2013-08-04 15:51   1人喜欢

  • rogerAce

    rogerAce

    1.flag为0,强引用为0释放实际对象,弱引用为0释放影子对象。在使用wp的时候,尽量先wp,在使用它的promote,去以弱生强,可以避免segment falut。 2.flag为LIFETIME_WEAK,那么当强引用为0的时候,不会去释放实际对象。而弱引用计数为0的时候,实际对象和影子对象会同时被释放。 3.flag为LIFETIME_FOREVER,该对象长生不死,摆脱了强弱引用技术的控制,它需要开发者自己控制了。

    2014-11-20 14:43

  • rogerAce

    rogerAce

    关于RefBase,sp,wp: 1.RefBase中有一个隐含的影子对象,该对象随着RedfBase的构造函数被创建在堆中,该影子对象内部有强弱引用计数。 2.sp化后,强弱引用计数各增加1,sp析构后,强弱引用计数各减1。 3.wp化后,弱引用计数增加1,wp析构后,弱引用计数减1。 关于析构时机: 1.强引用为0将导致实际对象和影子对象被delete 2.弱引用为0将导致影子对象被delete

    2014-11-19 18:21

  • ax003d

    ax003d (Robert)

    Binder 驱动是用于 JNI 和 Native 直接的 IPC 讲述了如何编译 Android 源码

    2013-09-25 16:11

  • RednaxelaFX

    RednaxelaFX (Script Ahead, Code Behind)

    可能有人要问,对一个引用类型执行赋值操作,它的引用计数不会增加吗?而垃圾回收机制只会保证那些没有引用的对象才会被清理。问得对,但如果在JNI层使用下面这样的语句,是不会增加引用计数的。 save_thiz = thiz; // 这种赋值不会增加jobject的引用计数。 嗯确实不会增加引用计数。因为Dalvik VM从来就没用过引用计数来实现它的GC。它主要用的是基于mark-sweep算法的实现,早期是一种半保守式GC,后来逐渐演变为准确式GC。关...

    2013-08-05 13:14

<前页 1 2 3 后页>

笔记是你写在书页留白边上的内容;是你阅读中的批注、摘抄及随感。

笔记必须是自己所写,不欢迎转载。摘抄原文的部分应该进行特殊标明。

深入理解Android

>深入理解Android