Android -- getSystemService

简介:

说明                                                                                   

Android的后台运行在很多service,它们在系统启动时被SystemServer开启,支持系统的正常工作,比如MountService监听是否有SD卡安装及移除,ClipboardService提供剪切板功能,PackageManagerService提供软件包的安装移除及查看等等,应用程序可以通过系统提供的Manager接口来访问这些Service提供的数据。

举例说明基本流程                                                                   

以android系统支持sensor(传感器)实例来说明框架层的service和manager是如何配合工作的

1) 什么是sensor

  sensor是传感器, 比如控制横竖屏切换利用的就是重力传感器(gsensor), 还有accelerator sensor可取得x, y, z三个轴上的加速度(应用如平衡球, 小猴吃香蕉等)

2) 应用程序调用(以下为关键代码)

sensorManager=(SensorManager)getSystemService(context.SENSOR_SERVICE);

lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);

sensorManager.registerListener(sensorListener, lightSensor, SensorManager.SENSOR_DELAY_NORMAL);

3) Manager层

  a) 提供给应用程序调用的接口,同实与Service交互,实现功能

  frameworks/base/core/java/android/hardware/SensorManager.java

4) Service层

  a) 开机时就运行的管理Sensor的后台服务

  frameworks/base/services/java/com/android/server/SensorService.java

  b) sensor后台服务需要的JNI,通过它与系统级交互

  frameworks/base/services/jni/com_android_server_SensorService.cpp

5) 系统层

  a) 传感器的头文件,硬件提供商按此文件的定义实现其功能

  hardware/libhardware/include/hardware/sensors.h

  b) 传感器的系统层实现,与内核交互,此处通常是硬件提供商提供的

  hareware/libsensors

6) 内核及硬件层

  内核访问硬件,同时以设备文件等方式提供给上层控制接口和传感器数据

系统层实现                                                                            

1) frameworks/base/core/java/android/*Manager.java 对应用的接口

2) frameworks/base/core/jni/ 对应用的接口的JNI

3) frameworks/base/services/java/com/android/server/ 后台服务

4) frameworks/base/services/jni/ JNI与系统层接口

5) hardware/libhardware/include/ 系统层头文件

6) hardware/libxxx 系统库支持

7) 内核支持

应用程序如何使用                                                                    

1) 查看系统提供哪些服务

  find frameworks/base/core/java/android/ -name *Manager.java

  此处可以看到调用系统提供服务的入口

2) 一般register listener,事件发生时都收到回调

新建一个service(以froyo为例)                                                      

1) 接口:接口供应用调用

  frameworks/base/core/java/android/app/ContextImpl.java 加服务名与Manager对应

  frameworks/base/core/java/android/content/Context.java 加服务名定义

2) Manager:提供服务对应的调用接口

  frameworks/base/core/java/android/app/StartXXXXManager.java 实现调用接口

  frameworks/base/core/java/android/app/IXXXXManager.aidl 定义调用接口

  frameworks/base/Android.mk 加入aidl的编译

3) service:提供后台服务支持

  frameworks/base/services/java/com/android/server/XXXXService.java 服务实现

  frameworks/base/services/java/com/android/server/SystemServer.java 启动服务

 

getSystemService是Android很重要的一个API,它是Activity的一个方法,根据传入的NAME来取得对应的Object,然后转换成相应的服务对象。以下介绍系统相应的服务。 

传入的Name

返回的对象

说明

WINDOW_SERVICE

WindowManager

管理打开的窗口程序

LAYOUT_INFLATER_SERVICE

LayoutInflater

取得xml里定义的view

ACTIVITY_SERVICE

ActivityManager

管理应用程序的系统状态

POWER_SERVICE

PowerManger

电源的服务

ALARM_SERVICE

AlarmManager

闹钟的服务

NOTIFICATION_SERVICE

NotificationManager

状态栏的服务

KEYGUARD_SERVICE

KeyguardManager

键盘锁的服务

LOCATION_SERVICE

LocationManager

位置的服务,如GPS

SEARCH_SERVICE

SearchManager

搜索的服务

VIBRATOR_SERVICE

Vibrator

手机震动的服务

CONNECTIVITY_SERVICE

Connectivity

网络连接的服务

WIFI_SERVICE

WifiManager

Wi-Fi服务

TELEPHONY_SERVICE

TeleponyManager

电话服务

我是天王盖地虎的分割线                    




本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3960171.html,如需转载请自行联系原作者

相关文章
|
20天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
12 0
|
1月前
|
XML 缓存 Android开发
Android开发,使用kotlin学习多媒体功能(详细)
Android开发,使用kotlin学习多媒体功能(详细)
96 0
|
2月前
|
Android开发
安卓SO层开发 -- 编译指定平台的SO文件
安卓SO层开发 -- 编译指定平台的SO文件
30 0
|
1月前
|
设计模式 人工智能 开发工具
安卓应用开发:构建未来移动体验
【2月更文挑战第17天】 随着智能手机的普及和移动互联网技术的不断进步,安卓应用开发已成为一个热门领域。本文将深入探讨安卓平台的应用开发流程、关键技术以及未来发展趋势。通过分析安卓系统的架构、开发工具和框架,本文旨在为开发者提供全面的技术指导,帮助他们构建高效、创新的移动应用,以满足不断变化的市场需求。
18 1
|
1月前
|
机器学习/深度学习 调度 Android开发
安卓应用开发:打造高效通知管理系统
【2月更文挑战第14天】 在移动操作系统中,通知管理是影响用户体验的关键因素之一。本文将探讨如何在安卓平台上构建一个高效的通知管理系统,包括服务、频道和通知的优化策略。我们将讨论最新的安卓开发工具和技术,以及如何通过这些工具提高通知的可见性和用户互动性,同时确保不会对用户造成干扰。
33 1
|
11天前
|
XML 开发工具 Android开发
构建高效的安卓应用:使用Jetpack Compose优化UI开发
【4月更文挑战第7天】 随着Android开发不断进化,开发者面临着提高应用性能与简化UI构建流程的双重挑战。本文将探讨如何使用Jetpack Compose这一现代UI工具包来优化安卓应用的开发流程,并提升用户界面的流畅性与一致性。通过介绍Jetpack Compose的核心概念、与传统方法的区别以及实际集成步骤,我们旨在提供一种高效且可靠的解决方案,以帮助开发者构建响应迅速且用户体验优良的安卓应用。
|
14天前
|
Java Android开发
Android开发之使用OpenGL实现翻书动画
本文讲述了如何使用OpenGL实现更平滑、逼真的电子书翻页动画,以解决传统贝塞尔曲线方法存在的卡顿和阴影问题。作者分享了一个改造后的外国代码示例,提供了从前往后和从后往前的翻页效果动图。文章附带了`GlTurnActivity`的Java代码片段,展示如何加载和显示书籍图片。完整工程代码可在作者的GitHub找到:https://github.com/aqi00/note/tree/master/ExmOpenGL。
18 1
Android开发之使用OpenGL实现翻书动画
|
14天前
|
Android开发 开发者
Android开发之OpenGL的画笔工具GL10
这篇文章简述了OpenGL通过GL10进行三维图形绘制,强调颜色取值范围为0.0到1.0,背景和画笔颜色设置方法;介绍了三维坐标系及与之相关的旋转、平移和缩放操作;最后探讨了坐标矩阵变换,包括设置绘图区域、调整镜头参数和改变观测方位。示例代码展示了如何使用这些方法创建简单的三维立方体。
12 1
Android开发之OpenGL的画笔工具GL10
|
20天前
|
Android开发
Android开发小技巧:怎样在 textview 前面加上一个小图标。
Android开发小技巧:怎样在 textview 前面加上一个小图标。
10 0
|
21天前
|
Android开发
Android 开发 pickerview 自定义选择器
Android 开发 pickerview 自定义选择器
12 0