Android GPS架构分析(一)
2015-07-05 19:45
543 查看
文章出处:http://danielwood.cublog.cn
介绍完了主体代码结构以及重要的数据结构后,下面来看看gps的定位服务(LocationManager)的启动过程。我总是喜欢追本溯源地从源头去认识事物。因为“人之初,性本善”,从事物的本性去认识事物。
LocationManager 这项服务是在SystemServer.java 中启动的,也就是系统启动之后,这个服务就已经启动了:
systemServer.java [framework/base/services/java/com/android/server]
在SystemServer.java的init2函数中启动了一个线程来注册Android的诸多服务,如:Bluetooth Service,NetworkManagement
Service,Notification Manager等,当然也包括Location Service。
SystemServer.java [frameworks/base/services/java/com/android/server]
在ServerThread线程的run函数中LocationManager服务的代码段如下:
在run函数的后半部分,是服务对系统的反馈,就是systemReady()函数。 LocationManager服务的反馈函数如下:
其中的locationF 是LocationManagerService的final类型,就是一旦赋值,不能更改。
哇!locationManager这项服务的反馈机制只在2.2的代码里面才有啊。2.1中的反馈机制中并没有locationManager(当然有其他的服务反馈)。
而在2.1版本中LocationManagerService的构造函数如下:
LocationManagerService.java [frameworks/base/services/java/com/android/server]
2.2版本
2.1是在构造函数的时候就启动一个自身服务线程。见构造函数。
2.2是在反馈机制中通过systemReady函数启动自身服务线程。如下:
通过线程run函数,调用initialize函数:
介绍完了主体代码结构以及重要的数据结构后,下面来看看gps的定位服务(LocationManager)的启动过程。我总是喜欢追本溯源地从源头去认识事物。因为“人之初,性本善”,从事物的本性去认识事物。
LocationManager 这项服务是在SystemServer.java 中启动的,也就是系统启动之后,这个服务就已经启动了:
systemServer.java [framework/base/services/java/com/android/server]
在SystemServer.java的init2函数中启动了一个线程来注册Android的诸多服务,如:Bluetooth Service,NetworkManagement
Service,Notification Manager等,当然也包括Location Service。
SystemServer.java [frameworks/base/services/java/com/android/server]
public static final void init2() { Slog.i(TAG, "Entered the Android system server!"); Thread thr = new ServerThread(); thr.setName("android.server.ServerThread"); thr.start(); } |
2.1版本 try { Log.i(TAG, "Location Manager"); ServiceManager.addService(Context.LOCATION_SERVICE, new LocationManagerService(context)); } catch (Throwable e) { Log.e(TAG, "Failure starting Location Manager", e); } 2.2的代码中代码段如下形式: try { Slog.i(TAG, "Location Manager"); location = new LocationManagerService(context); ServiceManager.addService(Context.LOCATION_SERVICE, location); } catch (Throwable e) { Slog.e(TAG, "Failure starting Location Manager |
if (locationF != null) locationF.systemReady(); |
final LocationManagerService locationF = location; |
而在2.1版本中LocationManagerService的构造函数如下:
LocationManagerService.java [frameworks/base/services/java/com/android/server]
public LocationManagerService(Context context) { super(); mContext = context; Thread thread = new Thread(null, this, "LocationManagerService"); thread.start(); if (LOCAL_LOGV) { Log.v(TAG, "Constructed LocationManager Service"); } } |
public LocationManagerService(Context context) { super(); mContext = context; if (LOCAL_LOGV) { Slog.v(TAG, "Constructed LocationManager Service"); } } |
2.2是在反馈机制中通过systemReady函数启动自身服务线程。如下:
void systemReady() { // we defer starting up the service until the system is ready Thread thread = new Thread(null, this, "LocationManagerService"); thread.start(); } |
public void run() { Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); Looper.prepare(); mLocationHandler = new LocationWorkerHandler(); initialize(); Looper.loop(); } |
相关文章推荐
- 福建贷款网站是什么
- 解决用teleport ultra下载网站中文乱码的问题
- cocos2D-X从的源代码的分析cocos2D-X学习OpenGL(1)----cocos2D-X渲染架构
- 几个比较好的latext简历模板网站
- java分布式通信系统(J2EE分布式服务器架构)
- 架构师成长历程:时刻对新技术保持敏感
- 世界各国语言学习网站大全
- 架构师速成6.4-开发框架
- 架构师速成6.4-开发框架 分类: 架构师速成 2015-07-05 11:18 402人阅读 评论(0) 收藏
- 收藏的几个Android开发相关的网站
- IIS网站发布
- MapReduce架构
- HDFS架构
- 电子商务网站,前后台是否该分离?
- PHP网站常见安全漏洞,及相应防范措施总结
- 手机淘宝Android客户端架构
- 大型网站图片服务器架构的演进(转)
- 我的第一份网站SEO优化方案是怎样炼成的?
- 高并发大型网站架构2
- 高并发,高可用,高流量网站的架构1