Android中ActivityManager学习笔记


    在之前写过2篇关于ActivityManager的文章,如下所示。都是通过实战去了解里面的信息,现在感觉太繁琐,所以做一个api介绍比较详细。就像之前学习Telephony那样,对整体了解整个ActivityManager很有用。

ActivityManager

    android.app包,含有6个内部类:

MemoryInfoProcessErrorStateInfoRecentTaskInfoRunningAppProcessInfoRunningServiceInfoRunningTaskInfo

    先从ActivityManager API下手。

Constants

META_HOME_ALTERNATE

    主activity中的标签值

MOVE_TASK_NO_USER_ACTION

    对于用户策动的活动,当前activity不会收到提示

MOVE_TASK_WITH_HOME

    将后面的任务立即移动到前面

RECENT_IGNORE_UNAVAILABLE

    提供一份不包含任何当前任务的列表,这些任务对于用户是不可见的

RECENT_WITH_EXCLUDED

    返回所有的任务

Methods

public boolean clearApplicationUserData ()

    清楚用户数据

public void dumpPackageState (FileDescriptor fd, String packageName)

    获取相应包名对应的apk的各种状态信息

public ConfigurationInfo getDeviceConfigurationInfo ()

    获取设备配置信息

public int getLargeMemoryClass ()

    当一个应用程序在一个大的堆栈空间里运行时,估算当前设备中每一个应用内存片段的值

public int getLauncherLargeIconDensity ()

    Lancher启动器的图标像素密度

public int getLauncherLargeIconSize ()

    启动器图标大小

public int getLauncherLargeIconSize ()

    当前设备每个应用的内存分类,就是内存的底线。低于这个值应用就会崩溃。

public void getMemoryInfo (ActivityManager.MemoryInfo outInfo)

    当前系统的内存信息

public static void getMyMemoryState (ActivityManager.RunningAppProcessInfo outState)

    返回调用者进程的全局内存状态信息。

public MemoryInfo[] getProcessMemoryInfo (int[] pids)

    进程所使用的内存信息

public List getProcessesInErrorState ()

    当系统发生错误的时候,获取当前运行的一些进程的信息

public List getRecentTasks (int maxNum, int flags)

用户启动的任务列表

public List getRunningAppProcesses ()

    当前设备运行着的应用进程信息

public PendingIntent getRunningServiceControlPanel (ComponentName service)

    返回一个PendingIntent,该PendingIntent会启动一个控制面板,里面会显示当前系统运行的一系列服务。

public List getRunningServices (int maxNum)

    当前运行的服务信息

public List getRunningTasks (int maxNum)

    当前系统运行的任务信息

public boolean isLowRamDevice ()

    是否是低内存的设备

public static boolean isRunningInTestHarness ()

    判断设备是否运行在测试框架

public static boolean isUserAMonkey ()

    判断当前设备是否被Monkey乱点中

public void killBackgroundProcesses (String packageName)

    杀死对应包的后台进程

public void moveTaskToFront (int taskId, int flags, Bundle options)

public void moveTaskToFront (int taskId, int flags)

    讲给定的id对应的任务移动到任务栈队列的最前面。

public void restartPackage (String packageName)

    在API 8中已废除

    Nested class

MemoryInfo

    通过getMemoryInfo(ActivityManager.MemoryInfo)获得该对象,可以用来检索有效的内存信息

Fields

public long availMem

    系统中的可见内存

public boolean lowMemory

    系统判断自己是否处于低内存的情况

public long threshold

    当内存太低,开始杀死后台服务和其他非外来的进程时,内存的临界值

public long totalMem

    内核中所有内存数

ProcessErrorStateInfo

    在发生错误时,检索内存中的有关信息

Constans:

    int CRASHED:奔溃

    int NOT_RESPONDING:无回应

    int NO_ERROR:0.状况码,无错误

Fields

    public int condition:进程中的状态码

    public byte[] crashData:(已经被弃用),空值

    public String longMsg:一个表述错误状态的长信息

    pubic int pid:进程id

    pubic String processName:发生错误或奔溃的进程的进程名称

    public String shortMsg:错误码的缩写

    public String stackTrace:错误发生时的堆栈跟踪信息

    public String tag:与错误有关的activity名

    public int uid:用户id

RecentTaskInfo

    用户最近访问和启动的任务信息

Fields

    public Intent baseIntent:启动任务的原始Intent,可以用它重启任务或者将当前任务移动到任务列表的最前面

    public CharSequence description:描述任务上次的状态

    public int id:唯一标识当前运行的任务

    public ComponentName origActivity:intent启动的实体控件

    public int persistentId:任务的永久id号,不管该任务有没有运行

RunningAppProcess

    与正在运行的进程有关信息可以通过该类获得。

Constants

    IMPORTANCE_BACKGROUND:importance变量的值之一。处于后台,但是仍然消耗资源的进程

    IMPORTANCE_EMPT:importance变量的值之一。空进程

    IMPORTANCE_FOREGROUND:importance变量的值之一。处于用户界面的进程。

    IMPORTANCE_PERCEPTIBLE:同上。仍然运行着某些对用户有用的的东西

    IMPORTANCE_SERVICE:同上。该进程包含仍在运行的服务

    IMPORTANCE_VISIBLE:同上。运行某些对用户可见的东西,但不是立即显示在UI界面上,

    REASON_PROVIDER_IN_USE:importanceReasonCode变量的值之一。应用的content provider中正被其他进程调用

    REASON_SERVICE_IN_USE:同上。

    REASON_UNKNOWN:同上。无特殊原因

Fields

    public int importance:重要性等级

    public int importanceReasonCode:重要原因code

    public ComponentName importanceReasonComponent:到当前进程中使用的组件

    public int importanceReasonPid:进程客户端其他进程的进程id。

    public int lastTrimLevel:报告给进程最后内存的等级

    public int lru:近期最少使用算法,即为importance进行排序。

    public int pid:进程id

    public String[] pkgList:该进程加载的所有包名

    public String processName:与当前对象相关的进程名称

    public int uid:用户id

RunningServiceInfo

    当前系统中运行的特殊服务

Constants

    FLAG_FOREGROUND:前台进程

    FLAG_PERSISTENT_PROCESS:持续进程

    FLAG_STARTED:已启动

    FLAG_SYSTEM_PROCESS:核心系统进程

Fields

    public long activeSince:第一次启动的时间

    public int clientCount:连接到该服务的客户端数量

    public int clientLabel:客户端标签

    public String clientPackage:客户端包名

    public int crashCount:在服务运行过程中奔溃的次数

    public int flags:运行标志

    public boolean foreground:判断是否位于前端UI界面上

    public long lastActivityTime:最后的活动时间

    public int pid:进程id

    public String process:服务所在的进程名

    public long restarting:重新启动的时间,如果非空,代表该服务当前不在运行。等待一段时间后重启。

    public ComponentName service:服务组件

    public boolean started:是否已经启动

    public int uid:用户id

RunningTaskInfo

    当前在系统中运行的特定任务信息,这些任务不是意味着有进程活动的任务,而是简单的标识用户已经离开该任务,但是没有关闭,但是当前系统可能会杀死该进程,只支持它的状态,等用户返回后重新启动。

Fields

    public ComponentName baseActivity:任务中第一次启动的activity.

    public CharSquence description:任务当前状态的描述

    public int id:任务id

    public int numActivities:当前任务中活跃的activity数

    public in numRunning:当前任务中运行的activity数(没有停止和持续的activity)

    public Bitmap thumbnail:当前状态的缩略图

    public ComponentName topActivity:任务历史栈最上层的activity.

    总结

    这一篇文章从ActivityManager讲起,逐渐讲解了其中的6个内部类,代表程序运行过程中所涉及到的各个进程、app、service、task的信息。对ActivityManager所管理的内容有了初步的了解。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在信号处理领域,DOA(Direction of Arrival)估计是一项关键技术,主要用于确定多个信号源到达接收阵列的方向。本文将详细探讨三种ESPRIT(Estimation of Signal Parameters via Rotational Invariance Techniques)算法在DOA估计的实现,以及它们在MATLAB环境的具体应用。 ESPRIT算法是由Paul Kailath等人于1986年提出的,其核心思想是利用阵列数据的旋转不变性来估计信号源的角度。这种算法相比传统的 MUSIC(Multiple Signal Classification)算法具有较低的计算复杂度,且无需进行特征值分解,因此在实际应用颇具优势。 1. 普通ESPRIT算法 普通ESPRIT算法分为两个主要步骤:构造等效旋转不变系统和估计角度。通过空间平移(如延时)构建两个子阵列,使得它们之间的关系具有旋转不变性。然后,通过对子阵列数据进行最小二乘拟合,可以得到信号源的角频率估计,进一步转换为DOA估计。 2. 常规ESPRIT算法实现 在描述提到的`common_esprit_method1.m`和`common_esprit_method2.m`是两种不同的普通ESPRIT算法实现。它们可能在实现细节上略有差异,比如选择子阵列的方式、参数估计的策略等。MATLAB代码通常会包含预处理步骤(如数据归一化)、子阵列构造、旋转不变性矩阵的建立、最小二乘估计等部分。通过运行这两个文件,可以比较它们在估计精度和计算效率上的异同。 3. TLS_ESPRIT算法 TLS(Total Least Squares)ESPRIT是对普通ESPRIT的优化,它考虑了数据噪声的影响,提高了估计的稳健性。在TLS_ESPRIT算法,不假设数据噪声是高斯白噪声,而是采用总最小二乘准则来拟合数据。这使得算法在噪声环境下表现更优。`TLS_esprit.m`文件应该包含了TLS_ESPRIT算法的完整实现,包括TLS估计的步骤和旋转不变性矩阵的改进处理。 在实际应用,选择合适的ESPRIT变体取决于系统条件,例如噪声水平、信号质量以及计算资源。通过MATLAB实现,研究者和工程师可以方便地比较不同算法的效果,并根据需要进行调整和优化。同时,这些代码也为教学和学习DOA估计提供了一个直观的平台,有助于深入理解ESPRIT算法的工作原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值