Android Framework -- ActivityManagerService

概述

AMS管理者四大组件 Activity Service BrocastCast ContentProvider,AMS与四大组件之间通过Binder通信,AMS作为服务端。

Context家族
Service
BroadcastReceiver
ContentProvider

Activity启动流程

简化口述版

  1. Launcher进程中:【图标】被点击,Launcher进程向AMS发起【启动某个Activity】(附带信息)的Binder请求
  2. AMS进程中:【保存Activity信息】,向Launcher进程发起【暂停的Binder请求】
  3. Launcher进程中:【调用onPause】暂停自己,并发起Binder请求告诉AMS我暂停了
  4. AMS进程中:检查Launcher是否已暂停;检查Activity栈,存在Activity所在进程则直接启动(直接跳7),不存在则启动一个新进程并传送一些信息【ActivityThread就是主线程,代表了一个App应用,AMS通过调用Process.start(“android.app.ActivityThread”)启动一个新进程ActivityThread,并以ActiivtyThread.main为入口】。
  5. 新进程中:ActivityThread.main中会创建消息循环Looper、创建Application等各种初始化工作,然后向AMS发送请求表示新进程已经启动初始化完毕
  6. AMS进程中:保存新进程信息ProcessRecord、ActivityRecord等。向新进程发起Binder请求,传送要启动的Activity等信息
  7. 新进程中:利用LoadedAPK加载APK资源,调用handleLaunchActivity启动Activity【handleLaunchActivity做了三件事:Instrumentation.newActivity创建Activity实例,创建Context对象与Activity关联;Instrumentation.callActivityOnCreate调用onCreate】

详细流程图

Service启动流程

这里写图片描述

简化口述版【左图启动Service】

  1. App进程中:把要启动的Service信息发送给AMS
  2. AMS进程中:用ServiceRecord保存Service信息,检查Manifest中的声明,检查启动Service的进程是否存在,存在走5,不存在则创建新进程
  3. 新进程:ActivityThread.main中会创建消息循环Looper、创建Application等各种初始化工作,然后向AMS发送请求表示新进程已经启动初始化完毕
  4. AMS进程:接收到ActivityThread对象,改造为ApplicationThreadProxy,把要启动的Service信息发送给新进程
  5. 新进程:调用handleCreateService启动Service。

简化口述版【绑定Service】

  1. App进程:把要绑定的Service信息发送给AMS
  2. AMS进程:用ServiceRecord保存Service信息,检查Manifest中的声明,检查启动Service的进程是否存在,存在走5,不存在则创建新进程
  3. 新进程:ActivityThread.main中会创建消息循环Looper、创建Application等各种初始化工作,然后向AMS发送请求表示新进程已经启动初始化完毕
  4. AMS进程:接收到ActivityThread对象,改造为ApplicationThreadProxy,把要启动的Service信息发送给新进程,【此处会发送两个消息,一个是启动一个是绑定】
  5. 新进程:收到启动消息,启动Service
  6. 新进程:收到绑定消息,绑定Service并把Binder返回给AMS
  7. AMS进程:收到Binder对象返回给App
  8. App进程:收到Binder对象,可以进行使用
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
7 Android的Audio系统 7.1 Audio系统的综述 Audio系统架构和代码路径 7.2 meida库中Audio相关接口 Audio系统的本地核心接口,类的层次结构 7.3 Audio系统和上层接口 Audio系统的JAVA层次的接口 7.4 Audio硬件抽象层 Audio系统的移植,Audio硬件抽象层的实现方法 ALSA Audio HAL实现 8 Android的Video 输入输出系统 8.1 Video输入输出系统的综述 视频输入输出系统架构和代码路径 8.2 Overlay系统 视频输出系统的结构 8.3 Overlay的硬件抽象层 视频输出系统的移植,抽象层实现 8.4 Camera系统与上层接口 Camera系统的层次结构 8.5 Camera的硬件抽象层 Camera系统的移植 Camera和Overlay的结合与数据传送 9 Android的多媒体系统 9.1 多媒体系统的结构 应用到底层的层次结构 9.2 media核心库的结构 多媒体本地代码的结构 9.3 多媒体部分的上层代码 照相机,媒体播放,媒体录制的框架结构 9.4 PackageVideo的架构 OpenMAX编译码插件的集成 9.5 stagefright的架构与实现(Éclair新增) 10 Android的电话系统 10.1 电话系统结构 Android电话系统的层次结构 10.2 电话系统组成部分 Android电话系统的本地和JAVA程序运行流程 10.3 电话系统移植层 为特定Modem移植的方法 11 Android的连接部分 11.1 WIFI无线局域网的部分 11.2 蓝牙部分 11.3 GPS部分 12 Android的传感器系统 12.1 Android传感器系统概述 12.2 Android传感器系统的层次结构 12.3 Android传感器系统的硬件抽象层和移植 重力加速度等传感器的移植 12.4 Android传感器系统的使用 1.HAL 技术详解 1.1 HAL 架構解析 1.2 ServiceManager的意义与用途 1.3 libhardware 与 HAL API 1.4 Stub & Module 的观念 1.5 专题讨论:定义并撰写第一个HAL Stub 2.HAL Development 2.1 HAL Stub Analysis and Design (OOAD) 2.2 HAL Stub Class 2.3 HAL Stub Interface 2.4 专题讨论:开发 LED 的 HAL 模组 3.Android API Design 3.1 Abstract Class and Interface in Android 3.2 The Reuse of Framework Design 3.3 OOAD of new APIs 3.4 Implementaion of new APIs 3.5 Singleton Pattern to Android APIs 3.6 Factory Method Pattern to Android APIs 4.Extend Android API 4.1 如何加入 API 至 Android Framework 4.2 如何编译并制作独立 JAR 档 4.3 上机实验:开发LedService API 与制作mokoid.jar 程式库 5.JNI & Runtime Library 5.1 什么是 JNI 5.2 如何撰写 JNI & Native Method 5.3 如何制作 Android Runtime Library 5.4 专题讨论:如何开发与制作Runtime Library 6.5 专题讨论:SensorManager与SensorService实例 7.SystemService 与 HAL 整合7.1 IPC、 Remote method call与Binder观念说明 7.2 AIDL 介绍与IInterface设计观念解析 7.3 Activity & ApplicationContext 7.4 ServiceManager 7.5 专题讨论:LedService设计与ILedService探讨 8.Manager API (Refinement-架构优化) 8.1 SensorManager与 SensorService实例探讨 8.2 Remote Object观念与IBinder介绍 8.3 如何以Proxy Object整合Android Service 8.4 Long operations 的解析与实作细节 8.5 RemoteException 的解析与实作细节 8.6 Handler 与 Message 的解析与实作细节 8.7 Error Handling 9.专题探讨 9.1 整合驱动程式至Android 框架 9.2 撰写Anroid应用程式以控制LED 9.3 标准的Android HAL 架构 9.4 HAL Stub OOAD & Implementation
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值