android系统framework层源码分析

android系统framework层源码分析

ID:39960468

大小:1.18 MB

页数:40页

时间:2019-07-16

android系统framework层源码分析_第1页
android系统framework层源码分析_第2页
android系统framework层源码分析_第3页
android系统framework层源码分析_第4页
android系统framework层源码分析_第5页
资源描述:

《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。在运行过程中可能会被垃圾回收。所以在程序中使用它

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。