framework层服务分析

framework层服务分析

      最近在做公司内部员工android系统培训,编写了一些PPT,引用了网上诸位大侠的贡献,下面就分析下framework框架层服务。

     

       Android Service是android 系统中的四大组件之一(Activity、Service、BroadcastReceiver、ContentProvider),大家都知道,它有下面两大特点:

    1)运行在后台的一种服务程序

    2)一般很少和用户交互,没有可视化界面。

    service可以在很多应用中都有使用,音乐播放器后台播放使用的也是service,比如检测电池电量的变化,statusbar改变等等,总之服务无处不在,深藏后宫不露脸,真是我们新时代的劳模。

/*****************************************************************************************************/
声明:本博内容均由http://blog.csdn.net/edsam49原创,转载请注明出处,谢谢!
/*****************************************************************************************************/

     服务的本质就是响应客户端请求,提供服务,要提供服务就必须建立接收请求,处理请求,应答客服端的框架。从程序的角度,服务一定要存在一个闭合循环框架和请求处理框架。下面我们开始深度分析framework框架层服务。

   下面首先引用一下android启动流程图:

    从图上很明显看出,framework框架层服务是由systemserver启动的,那又是怎么启动的呢?先来看看systemserver是怎么启动的:
     Init.rc里面去启动systemserver:

  再具体看看app_process怎么用的

     这样就启动了systemserver了,那又具体干了什么呢?往下看:

android framework 层服务是android启动时由systemServer启动的。

   public static void main(String[] args) {

   …………………

   System.loadLibrary("android_servers");        init1(args);

}
   加载android_servers共享库,里面有大把的JNI注册,看看他的android.mk就知道了,如下:

    
v再细一点看:是由systemserver的init2 阶段的第一个 java 线程ServerTHread 初始化的。

v

vSystemserver.java文件中:

vpublic static final void init2() {       

v      Slog.i(TAG, "Entered theAndroid system server!");

       Thread thr = new ServerThread();        

       thr.setName("android.server.ServerThread"); 

       thr.start();

v}

  看看这个thread里面都干了啥,主要的东西如下:

    大把的service都在这里注册了。下面以震荡的service做解析:

vVibratorServicevibrator = null;

v

vSlog.i(TAG, "VibratorService");           

vvibrator = new VibratorService(context);

 ServiceManager.addService("vibrator", vibrator);
    添加到系统里了。

  vpublic class VibratorService extends IVibratorService.Stub{ 。。。}

   那这个IVibratorService.Stub怎么来的呢?我告诉你,他是由IVibratorService.aidl在编译的时候自动产生的。下面看看AIDL的介绍,

      Implement your interfacemethods - The AIDL compiler creates an interface in the Java programminglanguage from your AIDL interface. This interface has an inner abstract classnamed Stub that inherits the interface (and implements a few additional methodsnecessary for the IPC call). You must create a class that extends Your Interface.Stub andimplements the methods you declared in your .aidl file.

   那我们看看震荡的这个IVibratorService.aidl,

   再看看自动产生的IVibratorService.java,

   头部就说了他是自动产生的了。再看看stub下面的一个重要的接口asinterface,

      我们接着看看上层怎么使用这个震荡service的,就不难理解asinterface了,

vprivate final IVibratorService mService;

v public SystemVibrator(Context context) {

    mPackageName = context.getOpPackageName();       

    mService = IVibratorService.Stub.asInterface(               

     ServiceManager.getService("vibrator"));}

    其实说到这一层层跟进,java部分就解析完了,到执行JNI了,那我们看看JNI里面都有些什么吧,

       通过JNI注册函数jniRegisterNativeMethods注册进去,把这个最终加到要编译到的android_server共享库的JNI_ONLOAD里面去就大工告成了。至于在native里面继续往下走就应该到HAL了,不在这个讨论范围里,都不难了,直接执行个空函数也行,这样service就完整介绍了。内容有点多,有点乱,是用培训PPT来写这个文章的,敬请见谅。

时间: 2024-11-05 04:51:18

framework层服务分析的相关文章

Android Framework Application Framework层简单介绍_Android

引言               Android的四层架构相比大家都很清楚,老生常谈的说一下分别为:Linux2.6内核层,核心库层,应用框架层,应用层.我今天重点介绍一下应用框架层Framework,其实也是我自己的学习心得.         Framework层为我们开发应用程序提供了非常多的API,我们通过调用特殊的API构造我们的APP,满足我们业务上的需求.写APP的人都知道,学习Android开发的第一步就是去学习各种各样的API,什么Activity,Service,Notific

android4.4系统LoadAverageService服务分析

android4.4系统LoadAverageService服务分析          在前一段时间写的<android系统cpu资源相关查询>感觉还比较实用,上次没有对LoadAverageService做深入一点的分析,今天我们接着来看看.        首先看看大智慧低调的LoadAverageService的源代码小心翼翼的潜伏在android\frameworks\base\packages\SystemUI\src\com\android\systemui下面, 文件很小,也就12

Android Framework Application Framework层简单介绍

引言 Android的四层架构相比大家都很清楚,老生常谈的说一下分别为:Linux2.6内核层,核心库层,应用框架层,应用层.我今天重点介绍一下应用框架层Framework,其实也是我自己的学习心得. Framework层为我们开发应用程序提供了非常多的API,我们通过调用特殊的API构造我们的APP,满足我们业务上的需求.写APP的人都知道,学习Android开发的第一步就是去学习各种各样的API,什么Activity,Service,Notification等.这些都是framework提供

《Android的设计与实现:卷I》——第1章 2.2JNI框架层实例分析

2.2 JNI框架层实例分析 框架层大量使用了JNI技术来完成对系统运行库的调用.深入理解JNI对分析框架层代码十分有用.本节将以框架层的实例详细讲解JNI编程的三个步骤. 在Android应用程序开发中,一般是调用应用框架层的android.util.Log.java提供的Java接口来使用日志系统.比如我们会写如下代码输出日志: Log.d(TAG,"debug log"); 这个Java接口其实是通过JNI调用系统运行库(即本地库)并最终调用内核驱动程序Logger把Log写到内

为 Android 添加 Java 层服务

1.     为什么要写底层核心服务呢?           因为底层核心服务是 Android框架里最接近 Linux/Driver的部分.为了充分发挥硬件设备的差异化特性,核心服务是让上层 Java应用程序来使用 Driver/HW Device 特色的重要管道.例如 Media. Telephone等底层硬件.        在开机过程中,就可以启动核心服务(汉字输入法服务等),让众多应用程序来共同使用. 由于共用,所以能有效降低 Java应用程序的大小( Size). 2.     核心

android的framework层动态修改原生输入法高度

问题描述 android的framework层动态修改原生输入法高度 framework层的修改(点击textview后,底层能动态控制输入法的高度显示) 解决方案 表达清楚,想要的效果什么样的!

Android的framework层音量控制原理分析--hot(key)处理

Android.media.AudioManager中包含了对android.media.AudioService的跨进程AIDL调用封装.正常处理过程:1.调整音量是通过AudioManager间接调用AudioService.adjustStreamVolume方法来完成逻辑处理;2.AudioService调用VolumePanel画出音量调整界面,并发送音量变动广播消息,3.StatusBarPolicy,接收广播消息判断是否在状态栏显示静音或振动图标. 问题点:1.AudioManag

Hibernate作为数据持久层的分析和研究

数据 摘要 在Java技术中有许多方法可以对数据进行持久化,持久层也是Java应用程序中最重要的部分之一.本文在分析了3种持久层主流解决方案的基础上,介绍了O-R映射开源项目Hibernate,并介绍了在Web应用开发中怎样配置Hibernate的环境,并使用它建立一个应用. 关键字 hibernate,数据持久化,JDBC, EJB,JDO 数据持久层简介 J2EE的三层结构是指表示层(Presentation),业务逻辑层(Business Logic)以及基础架构层(Infrastruct

深入Spring MVC framework之总体分析

在当今的MVC framework里,似乎Webwork2逐渐成为主流, Webwork2+SpringFramework的组合变得越来越流行.这似乎意味着Spring自带的MVC framework远比Webwork2差,所以大家纷纷用Webwork2来代替.确实,Spring的MVC framework不算是整个Spring的核心部件,但它的威力却超过了很多人的想象.很多人包括xiecc认为Spring的MVC framework是非常优秀的,甚至比Webwork2更优秀. 下面列举一下Sp