Android的GPS的代码分析(二)
来源:互联网 发布:php curl post请求 编辑:程序博客网 时间:2024/06/11 23:41
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 ( ) ;
}
在 ServerThread 线程的 run 函数中 LocationManager 服务的代码段如下:
2. 1版本
try {
Log . i( TAG, "Location Manager" ) ;
ServiceManager. addService ( Context . LOCATION_SERVICE, newLocationManagerService( 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
在 run 函数的后半部分,是服务对系统的反馈,就是 systemReady() 函数。 LocationManager 服务的反馈函数如下:
if ( locationF ! = null ) locationF. systemReady( ) ;
其中的 locationF 是 LocationManagerService 的 final 类型,就是一旦赋值,不能更改。
final LocationManagerService locationF = location ;
哇! locationManager 这项服务的反馈机制只在 2.2 的代码里面才有啊。 2.1 中的反馈机制中并没有 locationManager (当然有其他的服务反馈)。
而在 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" ) ;
}
}
2.2版本
public LocationManagerService( Context context ) {
super ( ) ;
mContext = context ;
if ( LOCAL_LOGV) {
Slog. v( TAG, "Constructed LocationManager Service" ) ;
}
}
2.1 是在构造函数的时候就启动一个自身服务线程。见构造函数。
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 ( ) ;
}
通过线程 run 函数,调用 initialize 函数 :
public void run ( )
{
Process . setThreadPriority( Process . THREAD_PRIORITY_BACKGROUND) ;
Looper. prepare ( ) ;
mLocationHandler = new LocationWorkerHandler( ) ;
initialize ( ) ;
Looper. loop ( ) ;
}
- Android的GPS的代码分析(二)
- Android的GPS的代码分析(二)
- Android的GPS的代码分析(一)
- Android的GPS的代码分析(三)
- Android的gps的代码分析(四)
- Android的GPS的代码分析(五)
- Android的GPS的代码分析(一)
- Android的GPS的代码分析(三)
- Android的gps的代码分析(四)
- Android的GPS的代码分析(五)
- Android GPS架构分析(二)
- Android GPS架构分析(二)
- Android GPS架构分析(转载二)
- Android GPS架构分析(二)
- Android GPS架构分析<二>
- Android的GPS的代码阅读笔记
- android关于GPS hal层的分析
- android关于GPS hal层的分析
- 第13周项目1-动物这样叫(3抽象类)
- 正则参考
- Android的GPS的代码分析(一)
- C/C++ -- Lib库文件nm调试之符号表
- C# DataSet的基本用法
- Android的GPS的代码分析(二)
- Dynamics CRM 报表导出EXCEL 列合并问题的解决方法
- MVC4的缓存
- Intel VT-X
- Spring 之注解事务 @Transactional
- NOI 2014 题解
- DataSource 和 DataSet 区别
- 黑马程序员——Java练习笔记——反射
- spring ioc 笔记(Spring in action)