`

Android启动各种系统服务线程

 
阅读更多

Android启动各种系统服务线程

 

SystemServer进程在Android的运行环境中扮演了"神经中枢"的作用,APK应用中能够直接交互的大部分系统服务都在该进程中运行,常见的比如WindowManagerServer(Wms)、ActivityManagerSystemService(AmS)、PackageManagerServer(PmS)等,这些系统服务都是以一个线程的方式存在于SystemServer进程中。下面就来介绍到底都有哪些服务线程,及其启动的顺序。

SystemServer的main()函数首先调用的是init1()函数,这是一个native函数,内部会进行一些与Dalvik虚拟机相关的初始化工作。该函数执行完毕后,其内部会调用Java端的init2()函数,这就是为什么Java源码中没有引用init2()的地方,主要的系统服务都是在init2()函数中完成的。

该函数首先创建了一个ServerThread对象,该对象是一个线程,然后直接运行该线程,如以下代码所示:

 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()方法内部开始真正启动各种服务线程。

基本上每个服务都有对应的Java类,从编码规范的角度来看,启动这些服务的模式可归类为三种,如图所示。

模式一是指直接使用构造函数构造一个服务,由于大多数服务都对应一个线程,因此,在构造函数内部就会创建一个线程并自动运行。

模式二是指服务类会提供一个getInstance()方法,通过该方法获取该服务对象,这样的好处是保证系统中仅包含一个该服务对象。

模式三是指从服务类的main()函数中开始执行。

无论以上何种模式,当创建了服务对象后,有时可能还需要调用该服务类的init()或者systemReady()函数以完成该对象的启动,当然这些都是服务类内部自定义的。为了区分以上启动的不同,以下采用一种新的方式描述该启动过程。比如当一个服务对象是通过模式一创建,并调用init()完成该服务的启动,我们就用模式1.2表示;如果构造函数返回后就已经启动,而无须任何其他调用,即什么都不做(nothing),我们就用模式1.1表示。

表中列出了SystemServer中所启动的所有服务,以及这些服务的启动模式。

                                     

                                                   SystemServer中启动服务列表

 

 

服务类名称

作用描述

启动模式

EntropyService

提供伪随机数

1.0

PowerManagerService

电源管理服务

1.2/3

ActivityManagerService

最核心的服务之一,管理Activity

自定义

TelephonyRegistry

通过该服务注册电话模块的事件响应,比如重启、关闭、启动等

1.0

PackageManagerService

程序包管理服务

3.3

AccountManagerService

账户管理服务,是指联系人账户,而不是Linux系统的账户

1.0

ContentService

ContentProvider服务,提供跨进程数据交换

3.0

BatteryService

电池管理服务

1.0

LightsService

自然光强度感应传感器服务

1.0

VibratorService

震动器服务

1.0

AlarmManagerService

定时器管理服务,提供定时提醒服务

1.0

WindowManagerService

Framework最核心的服务之一,负责窗口管理

3.3

BluetoothService

蓝牙服务

1.0 +

DevicePolicyManagerService

提供一些系统级别的设置及属性

1.3

StatusBarManagerService

状态栏管理服务

1.3

ClipboardService

系统剪切板服务

1.0

InputMethodManagerService

输入法管理服务

1.0

NetStatService

网络状态服务

1.0

NetworkManagementService

网络管理服务

NMS.create()

ConnectivityService

网络连接管理服务

2.3

ThrottleService

暂不清楚其作用

1.3

AccessibilityManagerService

辅助管理程序截获所有的用户输入,并根据这

些输入给用户一些额外的反馈,起到辅助的效果

1.0

MountService

挂载服务,可通过该服务调用Linux层面的mount程序

1.0

NotificationManagerService

通知栏管理服务,Android中的通知栏和状

态栏在一起,只是界面上前者在左边,后者在右边

1.3

DeviceStorageMonitorService

磁盘空间状态检测服务

1.0

LocationManagerService

地理位置服务

1.3

SearchManagerService

搜索管理服务

1.0

DropBoxManagerService

通过该服务访问Linux层面的Dropbox程序

1.0

WallpaperManagerService

墙纸管理服务,墙纸不等同于桌面背景,

View系统内部,墙纸可以作为任何窗口的背景

1.3

AudioService

音频管理服务

1.0

BackupManagerService

系统备份服务

1.0

AppWidgetService

Widget服务

1.3

RecognitionManagerService

身份识别服务

1.3

DiskStatsService

磁盘统计服务

1.0

AmS的启动模式如下:

调用main()函数,返回一个Context对象,而不是AmS服务本身。

调用AmS.setSystemProcess()。

调用AmS.installProviders()。

调用systemReady(),当AmS执行完systemReady()后,会相继启动相关联服务的systemReady()函数,完成整体初始化。

关于具体某个服务的内部启动过程,请参照源码,这些过程一般都比较简单。

 

SystemServer.java文件目录:frameworks\base\services\java\com\android\server\SystemServer.java

该文件中定义了另外一个类:ServerThread(ServerThread extends Thread )

参考:http://book.51cto.com/art/201109/291271.htm

 

另外:

Android系统进程Zygote启动过程的源代码分析

参考:http://webservices.ctocio.com.cn/4/12163004_5.shtml

 

 

 

 

分享到:
评论

相关推荐

    android线程启动方法源代码

    本文将深入解析Android线程启动的方法,并通过源代码示例帮助初学者理解和掌握这一关键技能。 Android系统基于Java,因此其线程机制遵循Java的基本规则,但同时也有一些特定于Android平台的特性。在Android中,主要...

    Android线程结束——合理的结束你想结束的线程

    在Android开发中,线程管理是一项重要的任务,尤其是在处理耗时操作时,如网络请求、数据库操作或大计算量的任务。本篇文章将深入探讨如何合理地结束Android中的线程,以确保应用程序的性能和稳定性。 首先,理解...

    android native实现系统服务

    在Android系统中,服务(Service)是一种用于在后台执行长时间运行操作的应用组件。它们不提供用户界面,但可以与其他组件(如Activity)交互。当需要使用C语言(Native代码)来实现系统服务时,这通常涉及到Android...

    Android后台多任务多线程断点下载

    在Android开发中,后台多任务多线程断点下载是一项重要的功能,特别是在处理大文件时,如游戏安装包、视频或者其他大型数据包。这个过程涉及到多个关键知识点,下面将逐一详细解释。 首先,**Android后台服务...

    Android中实现开机自动启动服务(service)实例

    最近在将 HevSocks5Client 移植到 Android 上了,在经过增加 signalfd 和 timerfd 相关的系统调用支持后,就可以直接使用 NDK 编译出 executable 了。直接的 native exectuable 在 Android 系统总还是不太方便用哦。...

    浅谈android线程模型

    当应用程序启动时,系统会自动创建一个主线程,通常称为UI线程或主线程,它负责处理所有与用户界面(UI)相关的事件,如按键、触摸屏事件以及屏幕绘制等。这意味着所有的UI更新操作都必须在这个线程中执行,以确保UI...

    Android中AsyncTask实现多线程计数

    另外,从Android 3.0(API level 11)开始,AsyncTask在后台运行的线程池大小由系统决定,可能导致并发任务执行顺序不确定。因此,对于复杂的多线程需求,可能需要考虑使用其他的并发控制机制,如IntentService、...

    android多线程管理

    Android系统默认在主线程(UI线程)执行所有的用户交互,如果在这个线程中执行耗时操作,会导致应用程序无响应(ANR)。因此,理解并熟练掌握多线程管理对于开发流畅的Android应用至关重要。 ### 1. 主线程与工作...

    Android 启动页demo

    本文将深入探讨如何创建一个Android启动页,解决图片被拉伸和压缩的问题,以及如何适配虚拟导航栏。 首先,我们需要了解启动页的基本结构。一个简单的启动页通常由一个SplashActivity组成,该Activity会在应用启动...

    Android 自动启动服务的示例.rar

    Android 自动启动服务,也可以手动启动或停止指定的服务,这只是一个例子,演示在android环境下,如何在后台自动运行Service。  public void onDestroy() {//重写的onDestroy方法   myThread.flag = false;//停止...

    android 通过服务线程改变ui

    当应用程序启动时,系统会自动创建这个线程。为了确保用户界面的响应性,耗时的操作如网络请求、数据库操作或大量计算不应在主线程中执行,否则会导致UI卡顿,甚至触发ANR(Application Not Responding)错误。 ...

    android 线程详解 各种经典 完整代码

    本文将深入探讨Android线程的概念、类型以及如何有效地利用线程进行编程,包括各种经典用法,并提供完整的代码示例。 一、Android线程基础 在Android系统中,主线程也称为UI线程,负责处理用户界面的所有交互。由于...

    Qt on Android 启动Android服务并通过该服务发射Qt信号

    在开发跨平台应用程序时,Qt框架提供了一个强大的工具集,允许开发者在多个...这个过程需要对Qt、Android服务、JNI以及多线程编程有深入的理解。理解并掌握这些技术,将有助于开发出更高效、更可靠的Android应用程序。

    android studio多线程下载

    在Android开发中,多线程下载是一项常见的技术,特别是在处理大文件或网络资源时,为了提高下载速度和用户体验,开发者通常会采用多线程来分块下载数据。Android Studio作为官方推荐的Android集成开发环境,提供了...

    android——多线程

    Android系统默认运行在一个单线程环境中,即主线程,也被称为UI线程。主线程主要负责处理UI更新、用户交互事件。如果在主线程中执行耗时操作,应用程序将会出现“Application Not Responding”(ANR)错误,用户体验...

    编写Android系统服务

    在Android系统中,服务(Service)是一种特殊类型的组件,它在后台长时间运行,即使用户界面不在前台也可以执行任务。服务通常用于处理不需用户交互但需要持续运行的任务,如播放音乐、定时任务或者网络通信等。本...

    android SurfaceView添加线程源码

    在`SurfaceCreated`回调中,我们通常会启动一个自定义的绘图线程,比如`RenderThread`。这个线程负责在`Surface`上进行绘制操作,确保与UI线程分离,避免阻塞UI。 ```java private class RenderThread extends ...

    Android启动流程分析

    在 Android 系统中,Launcher 应用程序的启动过程是由 ActivityManagerService 启动的,而 ActivityManagerService 和 PackageManagerService 一样,都是在开机时由 SystemServer 组件启动的。SystemServer 组件首先...

    android 多任务+多线程+断点下载

    总之,"android 多任务+多线程+断点下载"项目涵盖了Android开发中的多个核心知识点,包括多线程与服务的使用、网络请求、文件管理、UI优化和状态保存。这些技术对于构建高效、流畅的Android下载应用至关重要。

Global site tag (gtag.js) - Google Analytics