精华内容
下载资源
问答
  • AMS

    2020-08-27 17:26:43
    AMSCAppleMediaServiceClient初始化发现AMS服务如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式...

    AppleMediaServiceClient

    AMSC即AppleMediaServiceClient.
    本文主要讲述如何基于nordic平台添加AppleMediaServeceClient服务,用来发现IOS系统的AMS服务,并用来控制音乐播放,和获取音乐播放信息。

    初始化

    1. 添加AMS UUID ,AMS一共有一个服务,3个特性分别是:
      service:UUID 89D3502B-0F36-433A-8EF4-C502AD55F8DC
      Remote Command:UUID 9B3C81D8-57B1-4A8A-B8DF-0E56F7CA51C2 (writeable, notifiable)
      Entity Update:UUID 2F7CABCE-808D-411F-9A0C-BB92BA96C102 (writeable with response, notifiable)
      Entity Attribute: UUID C6B2F38C-23AB-46D8-A6AB-A3A870BBD5D7 (readable, writeable)
    2. 使用函数sd_ble_uuid_vs_add(&ble_ams_base_uuid128, &p_ams_c->service.service.uuid.type);来依次添加4个UUID并返回相应的uuid.type。
    3. 使用registered_handler_set(p_uuid, m_evt_handler);注册发现服务 89D3502B-0F36-433A-8EF4-C502AD55F8DC。
    4. 添加相应的AMS服务事件处理函数,和操作错误回调函数。

    发现AMS服务

    1. 蓝牙连接IOS系统后会在服务发现回调函数里面,通知发现服务完成。可以筛选出AMS服务发现完成的事件。 if( (p_evt->evt_type == BLE_DB_DISCOVERY_COMPLETE)
      && (p_evt->params.discovered_db.srv_uuid.uuid == AMS_UUID_SERVICE) )
      {
      ble_ams_c_on_db_disc_evt(&m_ams_c, p_evt);
      }
      保存3个特性的handle和前两个特性的cccdhandle。
    展开全文
  • AMs

    2020-12-08 18:37:45
    <div><p>There is no tutorial showing how to make am signals Also i try to convert a wav file and it say me tha it is not 48k sample rate WHY THERE IS NO HELP</p><p>该提问来源于开源项目:...
  • Ams

    2013-03-24 21:50:30
    1. Ams --- ActivityManagerService.java, android系统服务,Activity管理的服务端,用于管理activity的各种行为,控制activity的生命周期,派发消息事件,低内存管理等等。实现了IBinder接口,可以用于进程间通信...

    1. Ams --- ActivityManagerService.java, android系统服务,Activity管理的服务端,用于管理activity的各种行为,控制activity的生命周期,派发消息事件,低内存管理等等。实现了IBinder接口,可以用于进程间通信。
    2. ApplicationThread.java, 实现了IBinder接口,activity整个框架中客户端和服务端(Ams)通信的接口。同时也是类ActivityThread的内部类。这样就有效地把Ams和ActivityThread绑在了一起。代理模式?有点像。。。
    3. ActivityThread.java,如第2点所述,ApplicationThread所绑定的客户端就是ActivityThread。ActivityThread这个类在Activity客户端非常重要。
    a. 它是应用程序的入口,众所周知,java程序的入口时main()方法,同样,当Ams拉起一个新的进程,同时启动一个主线程的时候,主线程就从ActivityThread.main方法开始执行,它会初始化一些对象,然后自己进入消息等待队列, 也就是Looper.loop(); 一旦进入loop()方法,线程就进入了死循环,再也不会退出;一直在等待别人给他消息,然后执行这个消息。这也是edt(事件驱动模型)的原理。
    b. 它是Activity客户端的管理类,由它来决定,什么时候调用onCreate(),什么时候调用onResume()方法。当Activity发起一个请求时,比如startActivity(),或者finish()的时候,它会来处理这个请求,然后调用其它的人来具体做事。

    4. Instrumentation.java, 这个类除了跟android的测试有关之外,还是activity管理中实际做事情的人。比如,startActivity(), 在某种情况下,就是调用这个类,然后调用到ams.当然有个时候是通过ApplicationThread去访问Ams的。
    问题:有的同学就会想了,既然ApplicationThread可以访问Ams,那么我们应用程序是不是可以调用ApplicationThread类来访问ams,直接启动Activity呢?
    答案是不可以的。因为ApplicationThread是ActivityThead的私有内部类,外界无法访问。而ActivityThread是hide的,所以,我们应用程序不能通过sdk去访问ActivityThread类。同理,拿到Ams引用的接口是ActivityManagerNative类,而这个类也是hide的。所以应用程序也不能直接操作ams.
    5. Activity.java,这个类大家就再熟悉不过了,android最重要的组件之一;其实从java角度看,它一点也不特殊,它就是一个java对象,它会被创建,同时也会被垃圾回收机制销毁,只不过它受ams管理,所以它才有它的生命周期。所以显得比较重要。
    6. ActivityResult.java, Activity管理服务端中,activity的记录缓存。换句话说,就是客户端启动一个activity, ams会对它进行缓存,类型就是ActivityResult。我们可能会想,为什么不直接缓存Activity类型的值,而要新定义一个ActivityResult类型呢?
    因为Activity类没有实现IBinder接口,不能用于进程之间通信。而这个缓存值是Ams和客户端通信用的。所以必须实现IBinder接口。而且Activity设计的时候,也没有打算让它用于进程通信,看它的成员变量就可以知道,里面有很多的庞大对象,如list, map等等。这些对象是不适合跨进程传输的。因为java里面跨进程调用就是序列化和反序列化,那些庞大对象在序列化和反序列化的时候,会消耗大量的时间和资源。另外,根据设计法则,一个类的作用尽可能的单一,不要出现那种万能类。所以,这也是原因之一。

    AMS是什么?
    全名是ActivityManagerService, 顾名思义,就是Activity管理机制的服务器端。属于一个系统服务,位置systemProcess进程中。
    可以从多个角度来看ams;
    1. 从java的角度来看,ams就是一个java对象,实现了IBinder接口,所以它是一个用于进程间通信的接口。
    这个对象初始化是在SystemServer.java的run()方法里面。
    Slog.i(TAG, "Activity Manager");
    context = ActivityManagerService.main(factoryTest);
    这是一段很普通的java静态工厂代码,我们在这里创建我们的Ams对象。
    初始化方法
    public static final Context main(int factoryTest) {
    AThread thr = new AThread();
    thr.start(); //启动一个线程去初始化Ams对象
    synchronized (thr) {
    while (thr.mService == null) {
    try {
    thr.wait(); //等待AThread初始化Ams完成
    } catch (InterruptedException e) {
    }
    }
    }
    //…
    //…..
    }
    AThread的run()方法
    public void run() {
    Looper.prepare();
    android.os.Process.setThreadPriority(
    android.os.Process.THREAD_PRIORITY_FOREGROUND);
    android.os.Process.setCanSelfBackground(false);

    ActivityManagerService m = new ActivityManagerService(); //初始化Ams对象

    synchronized (this) {
    mService = m;
    notifyAll(); //初始化完成 ,notify main方法的wait()方法,告诉它已经完成,可以往下面走了。
    }
    //……
    Looper.loop(); //自己进入消息循环等待状态
    }
    思考:
    这里是另外启动了一个线程AThread去创建Ams对象,然后用wait/notify机制来实现线程之间的同步。
    a. 创建一个对象完全不必要另外开启个线程来处理,直接new出来不就可以了。有画蛇添足的感觉
    b. AThread在创建了Ams对象之后,进入消息循环状态而不是直接退出。但是看代码没有发现有向这个线程的handler发送消息的地方,也就是说AThread线程的状态接下来会永远阻塞。不明白这样做有什么意义。
    思考结果:
    它是AThread的run方法里面new ActivityManagerService(), 而ActivityManagerService里面有个变量mHandler,这样的话mHandler绑定的线程就是AThread这个线程了。通过向mHandler发消息,AThread就不停地从消息队列获取消息,处理消息。所以,上面a,b问题都已经解决。

    2. AMS是一个服务
    ActivityManagerService从名字就可以看出,它是一个服务,用来管理Activity,而且是一个系统服务,就像包管理服务,电池管理,震动管理服务一样。
    3. Ams是一个Binder
    Ams实现了IBinder接口,所以它是一个Binder,这意味着它不但可以用于进程间通信,还是一个线程。因为一个Binder就是一个线程。
    这个怎么理解呢?可以这么理解,如果我们启动一个Hello World安卓应用程序,里面不另外启动其他线程,那我觉得,这个进程里面我们最起码启动了4个线程
    a. Main线程, 这是程序的主线程,也是我们日常编写代码时用到最多的那个线程。比如我们重写了Activity的onCreate()方法,一般就是这个main线程来执行代码,也叫ui线程。这是因为安卓的组件(包括TextView, Button等等这些ui控件)都是非线程安全的,所以只允许main线程来操作。
    b. GC线程。我们都知道,java有垃圾回收机制,每个java程序(一个java虚拟机)都有一个垃圾回收线程,专门回收不再使用的对象。
    c. Binder1 就是我们的ApplicationThread,这个类实现了IBinder接口,用于进程间通信。具体来说,是我们的应用程序和Ams通信的工具。
    d. Binder2 就是我们的ViewRoot.W对象,它也是实现了IBinder接口,是用于我们的应用程序和Wms通信的工具。
    Ps: wms就是WindowManagerServier,和Ams差不多的概念,不过它是管理窗口的系统服务。

    4. Ams是一个单独的线程
    a. 首先系统服务不可能运行在systemProcess进程的主线程中。因为这么多系统服务如果都是运行在主线程中的话,肯定会发生阻塞。比如这个线程正在管理Activity,然后手机来电震动,那就没人来处理震动管理。所以一般服务都是运行在单独的线程里面(有些服务例外)
    b. Ams实现了IBinder接口,所以它就是一个单独的线程了,就是这个线程来处理Ams对Activity的管理。
    疑问: 如果Ams只有一个线程来执行Activity管理的话,会不会发生阻塞。比如两个客户端同时发起请求。
    我自己的看法是应该不会。因为手机操作系统是单界面的操作系统,就是说,在同一个时刻,只有一个Activity能展示在用户面前(TabActivity看起来同时展示了多个Activity,但安卓做了特殊的处理,暂不讨论),不像windows是多任务多窗口的操作系统。单窗口的话,那么发送的onPause(),onResume()之类的请求时,在同一时刻,应该只有一个人发起。

    Ams管理Activity流程
    1. 以Activity.startActivityForResult()为例说明,一般我们见的最多的是调用Activity.startActivity()方法。不过startActivity()的内部实现也是调用startActivityForResult()方法,只不过requestCode=-1
    。 Activity.startActivity();
    这里Activity start一个Activity 是异步的。换句话说,Activity不必等待ams结果的返回,直接往下面执行。当把接下来的代码执行完毕后,它就进入消息循环等待队列,继续等待别人给他消息。否则就一直阻塞。不过ams很快就会给它发送一个暂停当前activity的消息。就是下面的调用流程。
    Instrumentation. execStartActivity ();
    Ams.startActivity();
    ActivityStack. startActivityMayWait ();

    调用ActivityThread的暂停方法时候,同时向自己发送一个暂停消息,延迟500ms执行,如果500ms之后没有remove掉这个消息,就会说暂停出现异常。
    这里要说明的是,Ams发送暂停消息给ActivityThread之后,就直接往下面走了。所以这是一个异步调用,非阻塞。发送消息后,再等待ActivityThread把暂停完毕的消息返回给自己。
    ActivityThread. schedulePauseActivity ();

    暂停完毕调用ActivityManagerNative.getDefault().activityPaused(token, state);
    告诉Ams自己已经暂停完毕.

    在Ams.activityPaused()方法内会移除掉上面那个500ms的消息。然后调用新activity的onResume之类的方法。

    2. startActivityForResult()方法启动一个Activity,目标Acitivty结束后,会调用到onActivityResult()方法。
    这个流程也是类似的,以Activity.finish()方法是入口,ams在接到finishActivity()之后,就会辗转调用到Activity.onActivityResult()方法。

    这里Activity和ActivityManagerService就是通过Binder来完成进程间通信.

    四 关系图
    应用程序进程 系统进程
    Activity1

    Activity2 ActivityThread ApplicationThread Ams

    Activity3

    本来想上传个图,但是公司上传实在不方便,只能用文字描述了。。 sorry..
    这里的意思是ActivityThread通过AppliactionThread这个Binder来和Ams通信


    这里只是初略的分析了下ams,其实它的功能还有很多,如进程方面的,task方面的管理,低内存的管理等等。
    Android里面有oom模块,当系统内存不够用的时候,这个模块会发生作用。其实ams并不能直接操作oom模块,不过oom模块在杀死进程释放资源的时候有一个优先级哦oom_adj(-16~15),值越低,说明越重要。Ams也正是通过给killer设置oom_adj这个值来管理各个应用程序的。
    其实我们分析这些东西也不是为了修改ams,只是为了知其然,知其所以然。这样我们才会写出更健壮的应用程序。同时对我们的代码能力也是一种提高。
    展开全文
  • ams

    2016-12-30 09:09:14
    http://gityuan.com/2016/03/12/start-activity/

    http://gityuan.com/2016/03/12/start-activity/


    http://gityuan.com/2016/10/09/app-process-create-2/


    http://blog.csdn.net/tfygg/article/details/52093463

    展开全文
  • Tuning AMS

    2020-12-31 00:35:22
    It would be great if I can have some help or possible directions in MFEM to tune AMS for my solver. I have a basic parallel solver in 3D, which I believe is correctly coupled to AMS preconditioner. I ...
  • AMS介绍

    千次阅读 2019-04-20 02:58:34
    一、ActivityManagerService(简称AMS),是 Android 最核心的服务,因此其创建过程伴随在开机的过程中,其由System_server的ServerThread线程创建,创建完后就进入home activity界面,也就是AMS启动的第一个...

    一、ActivityManagerService(简称AMS),是 Android 最核心的服务,因此其创建过程伴随在开机的过程中,其由System_server的ServerThread线程创建,创建完后就进入home activity界面,也就是AMS启动的第一个activity。

    AMS主要负责系统中四大组件的启动、切换、及进程的管理和调度等工作。根据其主要的职能,可以从以下几个方面对AMS进行学习:
    AMS的创建及初始化过程
    AMS对于Activity的管理
    AMS对于Broadcast的管理
    AMS对于Service的管理
    AMS对于ContentProvider的管理
    AMS对于Process的管理

    PS:本节内容重点介绍对于Activity的管理,及常见的问题介绍。

    二、AMS代码位置
    /frameworks/base/core/java/android/app
    /frameworks/base/services/core/java/com/android/server/am
    1、Activity.java 所有activity的父类
    2、ActivityManager.java AMS client端,提供应用的api
    3、ActivityThread.java 该类是应用程序所对应进程的主线程类,即UI线程
    4、ActiveServices.java 和 ActiveServicesEs.java 控制service启动,重启等;
    5、ActivityRecord.java activity 记录对象
    6、ActivityStack.java 和 ActivityStackSupervisor.java 管理activity启动,生命周期以及activity堆栈等
    7、BroadcastQueue.java 管理广播发送
    8、ProcessRecord.java 该类用于记录每个进程的全部信息

    AMS框架
    在这里插入图片描述从类图可以看出,ActivityManagerProxy和ActivityManagerNative都实现了IActivityManager,ActivityManagerProxy就是代理部分,ActivityManagerNative就是实现部分,但ActivityManagerNative是个抽象类,并不处理过多的具体逻辑,大部分具体逻辑是由ActivityManagerService承担,这就是为什么我们说真实部分应该为ActivityManagerService。

    在这里插入图片描述启动一个Activity的常见方式如下:
    在launcher应用程序中点击一个应用图标,启动一个Activity
    按“Back”键,结束当前Activity,自动启动上一个Activity
    长按“Home”键,从最近任务列表中,选择一个启动
    在应用程序中调用startActivity()或startActivityForResult()启动指定的Activity

    其实前三种最终和第四种一样,调用如上两个方法来启动Activity。

    Activity启动流程图
    在这里插入图片描述Client端流程

    Launcher主线程捕获onClick()点击事件后,调用Launcher.startActivitySafely()方法。Launcher.startActivitySafely()内部调用了Launcher.startActivity()方法,Launcher.startActivity()内部调用了Launcher的父类Activity的startActivity()方法。

    Activity.startActivity()调用Activity.startActivityForResult()方法,传入该方法的requestCode参数若为-1,则表示Activity启动成功后,不需要执行Launcher.onActivityResult()方法处理返回结果。
    启动Activity需要与系统ActivityManagerService交互,必须纳入Instrumentation的监控,因此需要将启动请求转交instrumentation,即调用Instrumentation.execStartActivity()方法。

    Instrumentation.execStartActivity()首先通过ActivityMonitor检查启动请求,然后调用ActivityManagerNative.getDefault()得到ActivityManagerProxy代理对象,进而调用该代理对象的startActivity()方法。
    ActivityManagerProxy是ActivityManagerService的代理对象,因此其内部存储的是BinderProxy,调用ActivityManagerProxy.startActivity()实质是调用BinderProxy.transact()向Binder驱动发送START_ACTIVITY_TRANSACTION命令。Binder驱动将处理逻辑从Launcher所在进程切换到ActivityManagerService所在进程。

    Server端流程
    主要流程:
    重要节点:startActivity(intent) --> startActivityMayWait–> startActivityLocked --> startActivityUncheckedLocked --> startActivityLocked --> resumeTopActivityLocked -->startprocessLocked–>realstartActivity

    在这里插入图片描述总结:Activity的启动分为以下几个大的点:
    一)、client 的启动
    二)、server端启动
    1、ActivityStack阶段的启动
    2、进程启动
    3、ActivityThead阶段启动

    展开全文
  • Android AMS

    2020-09-10 15:09:14
    ActivityManagerService是Android系统中一个特别重要的系统服务,也是我们上层APP打交道最多的系统服务之一,ActivityManagerService(以下简称AMS) 主要负责四大组件的启动、切换、调度以及应用进程的管理和调度...
  • AMS_START.pdf

    2020-06-23 20:50:15
    AMS 时序图
  • AMS117中文资料

    2018-08-28 08:03:57
    其中包含了AMS117的电路图、AMS117的相关电器参数,以及AMS117的硬件封装对于硬件设计很有帮助
  • AMS1117稳压芯片介绍

    万次阅读 2018-04-22 08:06:14
    1.介绍:AMS1117是一个正向低压降稳压器,在1A电流下压降为1.2V。AMS1117有两个版本:固定输出版本和可调版本,固定输出电压为1.5V、1.8V、2.5V、2.85V、3.0V、3.3V、5.0V,具有1%的精度;固定输出电压为1.2V的精度为2...
  • android AMS

    万次阅读 2018-03-18 14:29:31
    AMS是Android中最核心的服务,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,其职责与操作系统中的进程管理和调度模块相类似,因此它在Android中非常重要。 ActivityManagerService ...
  • AMS Hook

    2017-07-31 10:26:03
    2,AMS Hook AMS 的详细Hook点请看这篇文章, http://blog.csdn.net/u012439416/article/details/70665923 Hook AMS只需要简单的Hook ActivityManagerNative的gDefault变量就可以了。 该变量定义如下, private static...
  • AMS笔记

    2017-11-28 09:25:24
    ActivityManagerService概念:ActivityManagerService是android系统中非常重要的服务(AMS机制和WMS机制是android中最复杂的) ams的作用是用来管理四大组件和内存进程调度的。AMS机制中重要的类:1.ProcessRecord:...
  • AMS Benchmark tests

    2021-01-12 11:05:36
    <div><p>AMS represents a crucial part at an application and it can impact performance (good or badly). The goal is to make AMS an tool that not only helps you to bring convention over configuration to...
  • AMS导图

    2020-09-05 10:59:37
    AMS思维导图
  • AMS1117芯片手册

    2017-08-15 13:40:05
    AMS1117芯片手册
  • <div><p>Now you should be able to integrate your AMS models with your blueprints as long as the blueprint is the top level object. This should aid in migrating to blueprint without having to migrate ...
  • Hypre AMS Preconditioner

    2021-01-01 16:48:01
    <p>I am currently using the Hypre AMS Preconditioner within FEniCS. I am wondering what are the missing pieces to make AMS work within Firedrake. As far as I can see to only missing thing is the </p>...
  • Feature hypre ams

    2020-12-29 08:34:11
    <div><p>WIP: Added Hypre AMS preconditioner <p>Fix issue #1643</p><p>该提问来源于开源项目:firedrakeproject/firedrake</p></div>
  • AMS剖析(1):AMS的启动

    2018-12-28 22:15:39
    前言:本专题是基于android9.1的源码对AMS进行深度剖析,这应该是目前全网中对AMS分析的最新最细的一篇文章; 其实AMS的主要内容可以分为两大部分,一个是AMS的数据结构,一个是AMS与AcitivtyThread的交互; 在...
  • <p>Updating ams module to reflect <a href="https://github.com/Azure/azure-rest-api-specs/commit/8911f4e6dd0582c4c9246adff0d25d2205835ab1#diff-a33af42cc1a6b85ed96cc19b1ee6adb8">Dec 2019 swagger</a>....
  • Hitachi TagmaStore:registered:可调整模块化存储系统(AMSAMS1000、AMS500和AMS200在同类产品中具有最高的可扩展性、高性能和高可用性。凭借缓存分区和RAID-6等大量高端特性,AMS200 和AMS500最适用于需要在较小...
  • AMS启动流程

    2019-01-27 04:32:49
    在SystemServer中简单分析了AMS的流程,这篇就详细地讲解AMS的启动流程 注意一点:AMS所在的进程是属于SystemServer中的 时序图 AMS流程 创建AMS对象 调用ams.setSystemProcess 调用ams.installSystemProviders 调用...
  • ams1117降压电路原理图

    2020-07-14 07:31:36
    ams1117 AMS1117是一个正向低压降稳压器,在1A电流下压降为1.2V。 AMS1117有两个版本:固定输出版本和可调版本,固定输出电压为1.5V、1.8V、2.5V、2.85V、3.0V、3.3V、5.0V,具有1%的精度;固定输出电压为1.2V...
  • AMS类图

    2016-09-10 22:42:30
    AmS可以说是Android上层系统最核心的模块之一,其主要完成管理应用进程的生命周期以及进程的Activity,Service,Broadcast和Provider等。 从系统运行的角度看,AmS可以分为Client端和Service端:Client端运行在各个...
  • 此前在Android系统启动流程、应用进程以及深入四大组件这三个系列文章中,都提及到了AMS,但都没有系统的来讲解它,本文就以AMS为主来进行讲解,其中会有一些知识点与这些系列文章有所重合,这里会尽量做到详尽讲解...
  • AMS安装

    2016-04-13 22:28:00
    2,确认已安装libnspr4软件包(服务器上AMS安装包同一目录下)。 AdobeAMS 5.0 服务软件包位于服务器如下位置: "\\172.16.16.10\common\录播服务器\RTMP\AMS\AdobeMediaServerStarter_5_x64_LS1_All.zip"...
  • 深入理解AMS --- 一 AMS 的启动

    千次阅读 2018-11-20 15:33:04
    深入理解AMS --- 一 AMS 的启动深入理解AMS --- 一 AMS 的启动一 Zygote fork1.1 Zygote fork SystemServer 进程1.2 System_service 进程启动,准备加载的ClassLoader1.3 RuntimeInit 初始化,进一步的准备初始化的...
  • AMS浅析

    2017-02-12 18:48:08
    1. Ams — ActivityManagerService.java, android系统服务,Activity管理的服务端,用于管理activity的各种行为,控制activity的生命周期,派发消息事件,低内存管理等等。实现了IBinder接口,可以用于进程间通信。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,798
精华内容 2,319
关键字:

AMS