欢迎来到天天文库
浏览记录
ID:39960468
大小:1.18 MB
页数:40页
时间:2019-07-16
《android系统framework层源码分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Android系统Framework层源码分析(深入理解Android重难点解析)主讲人——邓凡平大纲一JNI重难点分析1.1注册方法的选择1.2垃圾回收二init重难点分析2.1keywords.h的有趣用法2.2用好“DllMain函数”——客户端Property读取的实现三Android常用类重难点分析3.1RefBase、sp和wp3.2题外话——无所不用其极四Binder重难点分析4.1时空穿越魔术揭秘4.2Binder和线程的关系五Audio系统重难点分析5.1AudioTrack&方法论5.2AudioFlinger中的对象5.3AudioPolicyService实
2、例5.4audio_control_block_t分析5.5学习并实践DesktopCheck大纲(接上)六Surface系统重难点分析6.1来之不易的Activity6.2乾坤大挪移——如何与SurfaceFlinger建立联系?6.3生产者和消费者之间的纽带6.4SurfaceFlinger的工作流程分析6.5Transaction分析6.6CameraService中的严重bug6.7PageFlip过程分析一JNI重难点分析1JNI是什么?JavaNativeInterface2JNI在程序中有什么作用?白话:Java代码通过JNI调用Native(C/C++)写的函数Na
3、tive(C/C++)的函数操作Java层的函数(调用函数或者操作对象)1.1注册方法的选择什么是注册?Java中定义的native函数如何找到Native层对应的函数?如何关联这两个函数?两种方法:1静态法2动态法静态法:很简单,就是找根据一定的函数命名规则,在so库中搜索对应的函数。native_init------Java_android_media_MediaScanner_native_1init静态法标准步骤:先编写Java代码,然后编译生成.class文件使用Java的工具程序javah,如javah–ooutputpackagename.classname,这样它
4、会生成一个叫output.h的JNI层头文件。其中packagename.classname是Java代码编译后的class文件,而在生成的output.h文件里,声明了对应的JNI层函数,只要实现里面的函数即可。静态方法工作原理探析及其弊端工作原理当Java层调用native_init函数时,它会从对应的JNI库Java_android_media_MediaScanner_native_linit,如果没有,就会报错。如果找到,则会为这个native_init和Java_android_media_MediaScanner_native_linit建立一个关联关系,其实就是保存
5、JNI层函数的函数指针。以后再调用native_init函数时,直接使用这个函数指针就可以了。弊端:需要编译所有声明了native函数的类。只有生成了.class文件后,才能交由javah工具。默认的Native函数名字巨长......第一次调用某个native函数的时候,需要搜索so库中对应的Native函数。(估计是用dlsym来获得Native函数的函数指针吧!)动态方法亲,您们从前面静态方法的介绍中看到了什么?native函数和JNI层的函数,不就是找一函数指针嘛?“不找贵的,只找对的......”关键数据结构:JNINativeMethod如何注册?QuickQuesti
6、on:1什么时候,在哪儿注册JNINativeMethod数组?Answer:在一个特殊的native函数中......Quesiton:这个特殊的native函数又是在什么时候,在哪儿注册的?Answer:鸡生蛋?蛋生鸡?......当Java层通过System.loadLibrary加载完JNI动态库后,紧接着会查找该库中一个叫JNI_OnLoad的函数,如果有,就调用它,而动态注册的工作就是在这里完成的。1.2垃圾回收例子:可以在别的函数使用这个save_thiz吗?引用计数的作用呢?JNI提供三种类型的引用,足够满足亲们的需求了!LocalReference:本地引用。在J
7、NI层函数中使用的非全局引用对象都是LocalReference。它包括函数调用时传入的jobject、在JNI层函数中创建的jobject。LocalReference最大的特点就是,一旦JNI层函数返回,这些jobject就可能被垃圾回收。GlobalReference:全局引用,这种对象如不主动释放,就永远不会被垃圾回收。WeakGlobalReference:弱全局引用,一种特殊的GlobalReference。在运行过程中可能会被垃圾回收。所以在程序中使用它
此文档下载收益归作者所有