3、其他函数,开启导航,关闭导航等的就不一一介绍了,和上面的类似 。可以看源码 。
好了,jni层就大概分析好了,那么接着就是层的代码了 。
九、 GPS的层
首先还是主要流程图吧:
文章插图
层主要就是为上层应用调用提供接口 。而GPS的层,根据jni的代码我们也可以知道就在下面这个目录下了 。
/base//java/com////.java
那么 是怎么开始往下调用jni的呢?还是看代码吧 。
首先是在/base//java/com///.Java
对于这个系统服务,还是要从启动流程讲起,首先linux内核启动完了之后,会调用的init程序,然后挂载文件最小系统,解析init.rc和init.*.rc等脚本,接着,启动虚拟机,然后就是运行到了了,也就是上面那个.Java函数,在这个函数中,先看下 这个类,发现了有一个的init1函数 。
void init1([]args);
这个函数是调用了jni层的函数的,可以看
/base//jni/.cpp
首先是进入其main函数,
[html] view plain copy
.("");init1(args);
加载库,然后就是调用了jni层的init1函数 。
[html] view plain copy
it1(*env,){();}
其调用了();函数,而在函数中
[html] view plain copy
=env->(clazz,"init2","()V");env->(clazz,);
他又回调了.Java中的init2函数 。
在init2函数中
[html] view plain copy
(){Slog.i(TAG,"!");=();thr.("..");thr.start();}
创建了一个线程,最后他会调用到的run方法 。
在其run()方法中会启动很多服务,比如 、、、 、、 、Alarm 、、 等等,我们这里最主要的就是关注ce 。
[html] view plain copy
try{Slog.i(TAG,"");=rvice();.(.,);}catch(){("ger",e);}
这里new了一个ce对象,并且添加了这个 。
然后= ;
[html] view plain copy
try{if(!=null).();}catch(){("",e);}
当 好了之后就调用了.();函数了 。
下面进ce.java中的函数 。
[html] view plain copy
(){//=(null,this,"ce");.start();}
这里创建了一个线程,然后线程启动了,接着他会调用run方法 。也就是
[html] view plain copy
(){.(.);.();=dler();();.loop();}
在run方法中,他会初始化一些东东,也就是();函数了 。
[html] view plain copy
e(){//,()=().(.);=.(.,);//();………………………………}
这里主要看();函数 。
[html] view plain copy
ders(){(mLock){if(){;}//();=true;}}
这里又会调用(),然后是()函数 。其中就会调用到我们需要的了 。
[html] view plain copy
if(.()){//=er(,this);=.();r=.ner();();=;}
在new一个的时候会开一个hread的线程
[html] view plain copy
=();.start();
然后启动了线程,在这里会初始化,然后主要还是new了一个的类 。
[html] view plain copy
();=();
这个类中
[html] view plain copy
age(){=msg.what;(){:if(msg.arg1==1){();}else{();}break;:(msg.arg1==1);break;HOT:hot();break;TATE:tate(msg.arg1,()msg.obj);break;:();break;TA:if(){ta();}break;:(()msg.obj);break;:(msg.arg1);break;:(msg.arg1);break;}
就会处理很多事情了 。具体可以看上面的代码 。
接着他调用了d();这个函数 。
(name,true);
然后就启动了gps服务了
[html] view plain copy
if(){p.();if(>0){p.((),);p.ng(true);}}
接着我们开始往.java这里看
[html] view plain copy
(){(){(,1,null);}}
这里发送了一个消息,然后就会调用到上面的函数,();
[html] view plain copy
ble(){……=();if(){=();……}
这里就会调用到了jni的函数了 。
而的所有函数,在jni中我们都已经分析过了 。
接着便是
函数结束后,那便是
- 什么app可以剪辑音乐,求大家 一款手机视频剪辑app 可以配自带音乐的那种 谢谢
- 什么食物清理肾垃圾,吃什么食物可以清理*管垃圾
- 评分9.5以上的玄幻小说,求10m以上的玄幻小说
- 评分9.5以上的韩剧,暴风影音电影评分在9.5以上的电影有哪些
- 什么音乐可以提高记忆力,什么音乐可以提高记忆力
- 什么app可以制作视频,有哪些APP 可以制作视频?
- 什么app可以练伪声,什么是App
- 九大神秘时空穿越事件第一个真的难以反驳!
- 书同文可以理解,秦始皇为什么一定要车同轨?
- 评分9.0以上的科幻电影,评分9.0以上的电影励志