您的位置:首页 > 产品设计 > UI/UE

ActivityManagerService boot up sequence analysis

2015-03-20 18:41 429 查看
ActivityManagerService (AMS) 是android系统中最核心的服务,主要负责四大组件的启动,切换,调度及应用程序的管理和调度等工作,其职责与操作系统中的进程管理和调度模块类似。

以system server中ActivityManagerService的调用轨迹分为以下四个部分:

Part 1: AMS.main

Part 2: AMS.setSystemProcess

Part 3: AMS.installSystemProviders

Part 4: AMS.self().systemReady

启动流程介绍 1



次图片转载自网络,特别说明

启动流程介绍2



Part 1: AMS Main Function

1. 创建了 AMS对象

2. 创建一个ActivityThread 对象,它代表一个应用进程的

主线程

3. 获得一个context对象,它对应的application环境与

framework-res.apk有关;

通过此函数,为system_server 进程搭建了一个和应用进程一样的android运行环境

Part 1-1:Create AMS object



Part 1-2:Create ActivityThread & context



Part 1-2:Create ActivityThread & Context





Part 1-2:Create ActivityThread & Context



Part 1-3:Create ActivityStack



Part 2:setSystemProcess

1. 将ActivityManagerService, meminfo,gfxinfo等以下服务注册到ServiceManager

ServiceManager.addService("activity", m, true);

ServiceManager.addService("meminfo", new MemBinder(m));

ServiceManager.addService("gfxinfo", new GraphicsBinder(m));

ServiceManager.addService("dbinfo", new DbBinder(m));

ServiceManager.addService("cpuinfo", new CpuBinder(m));

ServiceManager.addService("permission", new PermissionController(m));

2. 通过PKMS 查询关于 framework-res.apk的ApplicationInfo,并用此初始化anroid运行环境

//向PKMS查询package名字为“android”的ApplicationInfo。PKMS 与AMS同一个进程,

但通过android运行环境context(AMS->binder->PKMS)来实现,

保证接口统一性及可扩展性

ApplicationInfo info = mSelf.mContext.getPackageManager().getApplicationInfo(

"android", STOCK_PM_FLAGS);

//对context进行二次初始化,与得到的applicatoninfo进行绑定。

mSystemThread.installSystemApplicationInfo(info);

3. 创建代表 system_server进程的管理结构ProcessRecord,并将systemserver进程并入

AMS管理

ProcessRecord app = mSelf.newProcessRecordLocked(

mSystemThread.getApplicationThread(), info,

info.processName, false); 创建processrecord,包含电量统计,应用信息,

进程名(system),oom_adj,IApplicationThread和应用进程通信等信息。

app.persistent = true;(常驻进程)

app.pid = MY_PID; system_server的进程号

app.maxAdj = ProcessList.SYSTEM_ADJ;(-16)最高优先级

AMS中用于保存管理 processRecord的两个成员变量结构。

mSelf.mProcessNames.put(app.processName, app.uid, app);

mSelf.mPidsSelfLocked.put(app.pid, app);

根据系统当前状态,调整进程调度优先级和OOM_ADJ.

mSelf.updateLruProcessLocked(app, true);

Part 3:installSystemProviders

SettingsProvider.apk 包含SettingsProvider,放在system_serever中运行方便为各个service提供配置信息查询





1 android程序中,一般创建的数据库存放在 /data/data/[应用程序包名]/databases

的目录下

2. 通过URI 进行操作,例如content://contacts/people/1 指定ID为1 联系人的数据

3. 相关操作涉及 query, insert,update ,delete 等操作

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: