精华内容
下载资源
问答
  • AMS原理分析

    千次阅读 2018-02-10 18:29:59
    一、AMS的主要作用:1、统一调度Activity(1)AMS中的重要数据类:ProcessReccord:保存该进程中包含的APK信息、内存状态信息用于内存回收、组件列表ActivityRecord:binder类可用于IPC调用(此处为WMS中调用),...

    一、AMS的主要作用:

    1、统一调度Activity

    (1)AMS中的重要数据类:

    ProcessReccord:保存该进程中包含的APK信息、内存状态信息用于内存回收、组件列表

    ActivityRecord:binder类可用于IPC调用(此处为WMS中调用),保存所有Acitivity信息,包括基本属性信息(包名、进程名、文件路径、图标主题等)和运行状态信息(idle、stop、finishing等)

    TaskRecord:任务栈信息,管理Activity的启动和退出顺序。

    除此之外,在frameworks\base\services\core\java\com\android\server\am路径中,还有serviceRecord、ProviderRecord、BoardRecord、ProcessRecord、UidRecord等近50个AMS相关的类。

    (2)重要变量

    如后台的Activity和近期任务的Activity最多20个,onpause必须在0.5秒内执行完,Activity必须在10秒内完成启动并回调给AMS。

    (3)启动Activity

    Acitivity的启动最终都会调用startActivity(),总体上就是ActivityThread和AMS和WMS的交互过程,详细过程这里不描述,大体流程如图,

    Application加载后,先加载provider,然后才加载Activity。

    2、内存管理

    (1)关闭而不退出

    应用关闭后,进程并未退出

    (2)内存不够用时,Activity按优先级县回收后台的Activity,或使用OOM进程回收内存

    3、进程管理

    android一般是多进程单窗口的,因为WMS只会派发消息到当前窗口,其他后台的进程窗口接收不到窗口派发的消息。

    二、AMS类的binder通信实现



     
      

    展开全文
  • Android AMS原理分析

    2020-08-26 15:32:03
    AMS(ActivityManagerService)本质上就是一个AIDL,通过他调用系统的底层服务,加载Activity、Service四大组件。 系统版本:Android10.0(29) 各个版本具体的执行过程可能存在差异,但是总体的流程还是一样的,都...

    AMS(ActivityManagerService)本质上就是一个AIDL,通过他调用系统的底层服务,加载Activity、Service四大组件。
    系统版本:Android10.0(29)
    各个版本具体的执行过程可能存在差异,但是总体的流程还是一样的,都是需要两次AIDL,来和系统进行交互。

    下面就来分析代码执行流程

    startActivity(new Intent(MainActivity.this,MainActivity.class));
    

    从上面这行代码开始:下面是依次执行的流程图

    在这里插入图片描述
    其中有 两次AIDL调用的过程
    1、是IActivityTaskManager调用startActivity(),是客户端部分,ActivityManagerService调用startActivity()是服务端部分;执行完之后就是在系统中执行后面的代码
    2、IApplicationThread调用scheduleTransaction()是客户端部分,
    ApplicationThread调用scheduleTransaction()是服务端部分;执行完之后回到当前app的进程中继续执行代码

    tips:了解AMS的运行流程,才能方便对插件化开发的理解,比如在执行第一次IActivityTaskManager调用startActivity()时候,系统会检测Activity是否注册过,因为插件未安装,所以这时候就需要将插件中的Activity替换成我们自定义的代理ProxyActivity,方便骗过系统。第二次就是在ActivityThread$H调用handleMessage()处理消息的时候,将ProxyActivity外壳去掉,还原成原来插件中的Activity。因此就是在两次AIDL之间进行插件化开发。但是因为Android不同版本系统之间存在差异,所以就需要不断的兼容修改,工作量还是很大的。

    展开全文
  • android AMS原理解析

    2021-01-11 18:02:23
    startactivity app启动过程 启动下半场,AMS返回后 部分结构继承关系

    startactivity

    在这里插入图片描述

    app启动过程

    在这里插入图片描述

    在这里插入图片描述
    启动下半场,AMS返回后
    在这里插入图片描述
    在这里插入图片描述

    部分结构继承关系

    在这里插入图片描述
    AMN策划AMS服务,AMS继承AMN实现具体细节

    获取AMP

    static public IActivityManager getDefault() {
            return gDefault.get();
        }
        private static final Singleton<IActivityManager> gDefault = new Singleton<IActivityManager>() {
            protected IActivityManager create() {
                IBinder b = ServiceManager.getService("activity");//1   AMS  binder引用
                if (false) {
                    Log.v("ActivityManager", "default service binder = " + b);
                }
                IActivityManager am = asInterface(b);//2
                if (false) {
                    Log.v("ActivityManager", "default service = " + am);
                }
                return am;
            }+
        };
    }
    

    插件虚拟化

    总结下以前研究过的virtualapp的原理,思路就是把apk按照插件的方式加载到自己virtualapp框架中,但启动插件的关键startActivity会在AMS检查xml文件当中是否声明了插件的名称,如果没有,就无法启动。但如果利用预留stubActivity到xml配置项中,并反射劫持AMS在startActivity过程的一些关键点,那我们就可以把我们真正启动的apk的名称换成stubActivity,直接按插件的形式启动apk。但这种方式需要分别劫持四大组件的启动过程,还要严格生成apk的声明周期,对不同版本的android系统适配来说是个不小的工作。但反观虚拟大师之类的虚拟攻击,采用了namespace方式直接个里启动新内核,产生的兼容问题将会小的多。

    展开全文
  • AMS内存管理 当应用程序关闭后,后台对应的进程并没有真正退出,以便下次再启动时能够快速启动。 当系统内存不够时,AMS会根据一定的优先规则退出优先级较低的进程。 1.应用关闭而进程不退出应用程序窗口关闭即...

    三、内存管理

    • 当应用程序关闭后,后台对应的进程并没有真正退出,以便下次再启动时能够快速启动。

    • 当系统内存不够时,AMS会根据一定的优先规则退出优先级较低的进程。

    1.应用关闭而进程不退出

    应用程序窗口关闭即Activity执行finish()对应的进程没有退出而会一直保存。

    每个应用程序对应一个ActivityThread类,ActivityThread初始化之后会进入Looper.loop()无限循环。以后依靠消息机制执行,即当有消息时处理消息,没有消息时该线程会进入到sleep状态。

    在Linux内核调度中,如果一个线程的状态为sleep,本身不会占用CPU时间片,因此不会影响当前进程的执行速度。

    以下三种情况会重新唤醒线程重新执行:

    • 定时器中断。应用程序设置定时器任务,当定时器发生时,系统会回调定时器,在定时器任务中向looper主线程发送消息,此时线程唤醒开始执行消息。

    • 用户按键消息。当有用户按键消息时,WMS专门处理输入消息的线程会把这个消息发送到looper主线程。

    • Binder中断。Binde是一个驱动设备,应用程序中包含一个Binder泽辉对应常见一个相应线程。当Binder驱动接受到消息,并派发给客户端的Binder对象后,Binder线程执行。如果在Binder消息处理中向looper主线程发送消息,此时主线程唤醒开始执行消息。

    2.Android中的OOM机制

    • Android中运行一个OOM进程,该进程启动时会首先向Linux内核中把自己注册为一个OOM Killer。

    • AMS会将每一个进程oom_adj值告知Killer。

    • 当系统内存不足时,会通知注册的OOM进程,OOMKiller就会根据oom_adj值进行内存释放。

    OOMKiller是一种可选方案,对于OEM厂商可以不支持OOM。只有在不支持OOM的情况下,Android才会采用“潜规则”优先退出后台的Activity。

    3.Activity退出时的内存回收过程

    如上图:

    1.启动Activity和按下back键都涉及Activity的销毁。

    2.启动Activity时会先去暂停当前显示的Activity,当待启动Activity启动完成时回调AMS的activityIdleInternalLocked()函数。在该函数中会执行内存回收操作。

    3.activityIdleInternalLocked()函数内部依次处理stop、finish状态的Activity,最后会执行到AMS的trimApplications(),在该函数中执行内存回收。

    4.activityIdleInternalLocked()是执行内存回收的关键函数。

    activityIdleInternalLocked()被调用的时机:

    • 首先是Activity启动成功时ActivityThread会回调AMS的相关方法最后执行到activityIdleInternalLocked()方法。该方法内部会首先取消10s的等待启动结果定时。

    • 在WMS回调ActivityRecord其window可见时,会回调activityIdleInternalLocked()。

    • 在completePauseLocked()中当stop状态Activity数目大于3时会回调activityIdleInternalLocked(),这种情况一般不出现。

    • 最后实在completePauseLocked()启动10s定时如果ActivityThread启动Activity未成功,10s时间到达会回调activityIdleInternalLocked()。

    如下执行AMS.trimApplications()过程:

    参考连接:

    Android 7.0 ActivityManagerService(8) 进程管理相关流程分析(2) updateOomAdjLocked http://blog.csdn.net/gaugamela/article/details/53927724

    展开全文
  • Android AMS原理分析(1)

    千次阅读 2017-03-22 11:38:37
    AMS提供的主要功能: 统一调度各个应用程序的Activity。 应用程序需要启动Activity–>报告给AMS,决定是否可以启动–>如果可以,通知应用程序运行指定Activity。AMS必须知道各个应用程序运行的Activity。 内存管理。...
  • ams1117降压电路原理

    2020-07-14 07:31:36
    ams1117降压电路原理AMS1117芯片为正向低压差稳压器,内部集成过热保护和限流电路,其固定输出版本电压可为1.5V、1.8V、2.5V、2.85V、3.0V、3.3V、5.0V,设计采用3.3V输出即ASM1117-3.3芯片.AMS1117降压电路图...
  • AMS1117-3.3 原理图库封装库
  • 本文主要讲了AMS1117-3.3接线原理及如何接线?下面一起来学习一下
  • 说明: 1. 通过Launcher或者start...2. AMP是AMS在App端(client端)的代理, ATP是ApplicationThread在AMS端(server端)的代理. ActivityThread用于App向AMS通信, ApplicationThread的用于AMS向App通信. 转载于:https...
  • AMS1117-3.3 AMS1117-3.3是一种输出电压为3.3V的正向低压降稳压器,适用于高效率线性稳压器发表开关电源稳压器电池充电器活跃的小型计算机系统接口终端笔记本电脑的电源管理电池供电的仪器。 下图是AMS1117-3.3的...
  • 原理AMS1117

    2015-09-12 09:47:49
    电源管理IC,DC-DC用于3.3V稳压管。
  • PackageManagerService和ActivityManagerService都是Zygote进程fork出来的,我之前敲了一段文字介绍Zygote进程的,有兴趣的...APK安装原理 AMS 什么是AMS AMS的通信方式介绍 Activity跨进程跳转 App启动流程 A
  • AmS内部原理(android内核学习记录)

    千次阅读 2016-03-14 21:46:20
    Ams是位于Framework中的服务段。 ActivityManagerService简称AmS,是android内核三大功能之一,另外两个是WindowManagerService和view。2、AmS提供的主要功能。 1、统一调试应用程序的Activity。应用程序要运行...
  • 上面类是AmS的全称,另外两大核心功能是WindowManagerService.java和View.java AmS提供的主要功能: 统一调度各应用程序 内存管理 进程管理 AmS中定义了几个重要的数据类,分别用来保存进程(Process)、...
  • 目前在国内手环 市场上,自带高精度心率检测功能的智能手环也日趋成熟, 小米还推出过心率手环,其中心率模块用的就是 AMS的动态心率检测芯片AS7000。1 系统总体方案介绍如图1基于AS7000心率手环系统框架所示,手环...
  • [Android]Ams 广播发送原理(三)

    千次阅读 2017-08-04 17:51:13
    broadcastIntentLocked Ams广播
  • ASM1117的工作原理和普通的78系列线性稳压器或LM317线性稳压器相同,所有的线性稳压器都是通过对输出电压采样,然后反馈到调节电路去调节输出级调整管的阻抗,当输出电压偏低时,就调节输出级的阻抗变小从而减小调整...
  • AMS提供的主要功能: 统一调度各个应用程序的Activity。 应用程序需要启动Activity–>报告给AMS,决定是否可以启动–>如果可以,通知应用程序运行指定Activity。 AMS必须知道各个应用程序运行的Activity。 ...
  • Android AMS源码阅读分析(一)

    千次阅读 2019-01-22 20:41:00
    最近学习了柯元旦所著《Android内核剖析》之AMS原理篇章,结合自己的理解以及对源码的分析,记录一下学习心得,AMS代码非常多,而且和Application以及Activity之间的交互也相对繁杂,这里学习大致的主干流程,之后有...
  • 基于AMS流媒体服务器的直播原理

    千次阅读 2014-05-12 00:11:52
    【摘要】本文描述了采用VPR8000编码器进行视频采集压缩并通过转码封装发到流媒体服务器AMS上进行转发,实现了视频直播的功能,为视频直播提供了可行的方案框架。 【关键词】Adobe Media Server,FFMPEG,VPR8000 ...
  • 学习内容(1)Android6.0之AMS如何启动app上篇 http://blog.csdn.net/love000520/article/details/70230693 (2) Android6.0之AMS启动App下篇 http://blog.csdn.net/love000520/article/details/70230784 (3)...
  • 启动在Android系统启动流程中中我们提到过,AMS是在system_service中启动的,//frameworks/base/services/java/corri/android/server/SystemServer.java//该方法主要启动服务 ActivityManagerService,PowerManager...
  • 本文档为个人博客文档系统的备份版本、作者:小游、作者博客:点击访问 上面那个头不要接地,接了会有问题. 还有就是AMS1117不只是3.3V稳压的,还有5v的,自己注意看左下角的数字如果是5就是5V如果是3就是3V ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,013
精华内容 3,605
关键字:

ams原理