文档章节

Android系统服务初始化源码分析

亭子happy
 亭子happy
发布于 2014/04/22 17:17
字数 295
阅读 317
收藏 3
点赞 0
评论 0

    android的系统服务是由SystemServer.java开始的。zygote进程启动了SystemServer进程。SystemServer类中有静态main函数,SystemServer进程就是从这里开始的。

   在SystemServer类的main函数中会new ServerThread类,该类时SystemServer的内部类。main函数中会执行ServerThread对象的initAndLoop()方法。

    在initAndLoop()方法中,会首先启动一个Looper,然后获取到ServiceManager,接着用ServiceManager的addService方法,将所有的系统Service都增加到ServiceManagerNative类中。其中ServiceManager类是提供给用户的接口,ServiceManagerNative是它的具体实现。

    接着我们看ServiceManagerNative类中addService方法的源代码:

 public void addService(String name, IBinder service, boolean allowIsolated)
            throws RemoteException {
        Parcel data = Parcel.obtain();
        Parcel reply = Parcel.obtain();
        data.writeInterfaceToken(IServiceManager.descriptor);
        data.writeString(name);
        data.writeStrongBinder(service);
        data.writeInt(allowIsolated ? 1 : 0);
        mRemote.transact(ADD_SERVICE_TRANSACTION, data, reply, 0);
        reply.recycle();
        data.recycle();
    }

    我们看到会将某个系统Service发送到mRemote中,而这个mRemote是什么呢?这个mRemote是BinderInternal的getContextObject方法获取到的IBinder对象。getContextObject这个方法是native的,也就是说各个系统Service是由SystemServer进程的native代码来管理的。

public static final native IBinder getContextObject();

    在《Android内核剖析》这本书中看到一幅进程图,摘录如下:



© 著作权归作者所有

共有 人打赏支持
亭子happy
粉丝 113
博文 195
码字总数 45462
作品 0
海淀
程序员
探索Activity启动流程-实现打开插件中的Activity

通过分析Activity的启动流程,探索Android的插件化,下面通过源码分析实现一个简单的插件化 打开一个 未安装apk中的Activity 开始分析 Activity的启动流程从 startActivity开始 然后通过 In...

liwg ⋅ 05/11 ⋅ 0

(一)Android中的单例模式

作为一个Android开发的老司机,或者刚入行的司机,我觉得你还是有必要学习下Android的单例模式,毕竟 单例模式是我们很常用的一个设计模式。 1. 介绍 1.1 定义 确保某一个类只有一个实例,而...

24K男 ⋅ 04/25 ⋅ 0

android沉浸状态栏实现、地图多线路规划、Retrofit+RxJava+Jsoup+Mvp模式资讯类App等源码

Android精选源码 Android各种沉浸式状态栏实现源码(http://www.apkbus.com/thread-598927-1-1.html) Android自定义View实现炫酷的星期日期选择控件源码(http://www.apkbus.com/thread-59893...

逆鳞龙 ⋅ 05/08 ⋅ 0

LayoutInflater源码分析

在《(-)Android中的单例模式》分析中,我们分析了Android中单例模式的实现,且以LayoutInflater为实例,本博文就带大家来认识下我们常用的LayoutInflater源码。 1. setContentView 首先来看...

24K男 ⋅ 05/03 ⋅ 0

组件化知识梳理(3) - Arouter 源码分析之运行时 SDK

组件化知识梳理目录 组件化知识梳理(1) - Arouter 的基本使用 组件化知识梳理(2) - Arouter 源码分析之 Complier SDK 组件化知识梳理(3) - Arouter 源码分析之运行时 SDK 一、Api SDK 分析 ...

泽毛 ⋅ 04/14 ⋅ 0

Android源码浅析(三)——Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机

Android源码浅析(三)——Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机 最近比较忙,而且又要维护自己的博客,视频和公众号,也就没仔细的梳理源码的...

刘桂林 ⋅ 2016/06/15 ⋅ 0

Android 【插件化】"偷梁换柱"的高手-VirtualApk源码解析

关于VirtualApk VirtualApk github : https://github.com/didi/VirtualAPK VirtualAPK wiki : https://github.com/didi/VirtualAPK/wiki 工程介绍 工程结构 CoreLibrary是VirtualApk(以下简称......

qq_17250009 ⋅ 04/12 ⋅ 0

浅入浅出 Android 安全:第三章 Android 本地用户空间层安全

第三章 Android 本地用户空间层安全 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 本地用户空间层在 Android 操作系统的安全配置中起到重要作用。 不理解在该...

apachecn_飞龙 ⋅ 2016/12/02 ⋅ 0

自定义View心法——View工作流程

前言 本文的目的有两个: 给对自定义View感兴趣的人一些入门的指引 给正在使用自定义View的人一些更深入的解析 自定义View一直都被认为是Android开发高手的必备技能,而稳中带皮的学习View的...

Alex_Payne ⋅ 05/24 ⋅ 0

android仿IT之家、炫酷水波纹、Kotlin MVP项目、后台模拟点击、蜂巢迷宫小游戏等源码

Android精选源码 Android 炫酷的多重水波纹源码(http://www.apkbus.com/thread-598586-1-1.html) Android开发一款基于行为识别和个性化推荐的智能推荐APP(http://www.apkbus.com/thread-5985...

逆鳞龙 ⋅ 05/02 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

RabbitMQ学习以及与Spring的集成(三)

本文介绍RabbitMQ与Spring的简单集成以及消息的发送和接收。 在RabbitMQ的Spring配置文件中,首先需要增加命名空间。 xmlns:rabbit="http://www.springframework.org/schema/rabbit" 其次是模...

onedotdot ⋅ 14分钟前 ⋅ 0

JAVA实现仿微信红包分配规则

最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指教。 算法介绍 一、红包金额限制 对于微...

楠木楠 ⋅ 26分钟前 ⋅ 0

Python 数电表格格式化 xlutils xlwt xlrd的使用

需要安装 xlutils xlwt xlrd 格式化前 格式化后 代码 先copy读取的表格,然后按照一定的规则修改,将昵称中的学号提取出来替换昵称即可 from xlrd import open_workbookfrom xlutils.copy ...

阿豪boy ⋅ 55分钟前 ⋅ 0

面试题:使用rand5()生成rand7()

前言 读研究生这3 年,思维与本科相比变化挺大的,这几年除了看论文、设计方案,更重要的是学会注重先思考、再实现,感觉更加成熟吧,不再像个小P孩,人年轻时总会心高气傲。有1 道面试题:给...

初雪之音 ⋅ 55分钟前 ⋅ 0

Docker Toolbox Looks like something went wrong

Docker Toolbox 重新安装后提示错误:Looks like something went wrong in step ´Checking if machine default exists´ 控制面板-->程序与应用-->启用或关闭windows功能:找到Hyper-V,如果处......

随你疯 ⋅ 今天 ⋅ 0

Guacamole 远程桌面

本文将Apache的guacamole服务的部署和应用,http://guacamole.apache.org/doc/gug/ 该链接下有全部相关知识的英文文档,如果水平ok,可以去这里仔细查看。 一、简介 Apache Guacamole 是无客...

千里明月 ⋅ 今天 ⋅ 0

nagios 安装

Nagios简介:监控网络并排除网络故障的工具:nagios,Ntop,OpenVAS,OCS,OSSIM等开源监控工具。 可以实现对网络上的服务器进行全面的监控,包括服务(apache、mysql、ntp、ftp、disk、qmail和h...

寰宇01 ⋅ 今天 ⋅ 0

AngularDart注意事项

默认情况下创建Dart项目应出现以下列表: 有时会因为不知明的原因导致列表项缺失: 此时可以通过以下步骤解决: 1.创建项目涉及到的包:stagehand 2.执行pub global activate stagehand或pub...

scooplol ⋅ 今天 ⋅ 0

Java Web如何操作Cookie的添加修改和删除

创建Cookie对象 Cookie cookie = new Cookie("id", "1"); 修改Cookie值 cookie.setValue("2"); 设置Cookie有效期和删除Cookie cookie.setMaxAge(24*60*60); // Cookie有效时间 co......

二营长意大利炮 ⋅ 今天 ⋅ 0

【每天一个JQuery特效】淡入淡出显示或隐藏窗口

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元...

Rhymo-Wu ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部