Android中ActivityManager学习笔记(3)

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

Android中ActivityManager学习笔记(1)-MemoryInfo

Android中ActivityManager学习笔记(2)-RunningServiceInfo

ActivityManager

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

  • MemoryInfo
  • ProcessErrorStateInfo
  • RecentTaskInfo
  • RunningAppProcessInfo
  • RunningServiceInfo
  • RunningTaskInfo

先从ActivityManager API下手。

Constants

META_HOME_ALTERNATE

主activity中的<meta-data>标签值

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<ActivityManager.ProcessErrorStateInfo>
getProcessesInErrorState
()

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

public List<ActivityManager.RecentTaskInfo>
getRecentTasks (int maxNum, int flags)

用户启动的任务列表

public List<ActivityManager.RunningAppProcessInfo>
getRunningAppProcesses ()

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

public PendingIntent getRunningServiceControlPanel
(ComponentName service)

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

public List<ActivityManager.RunningServiceInfo>
getRunningServices (int maxNum)

当前运行的服务信息

public List<ActivityManager.RunningTaskInfo>
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所管理的内容有了初步的了解。

Android中ActivityManager学习笔记(3),布布扣,bubuko.com

时间: 2024-08-02 06:41:58

Android中ActivityManager学习笔记(3)的相关文章

android 浮动窗口学习笔记及个人理解(仿360手机助手)

非常感谢原文作者 http://blog.csdn.net/guolin_blog/article/details/8689140 经自己理解 程序运行界面如下图: 1.程序入口界面 2.小浮动窗口 3.大浮动窗口 由上图可看出,可以看出我们基本需要: 1.一个主Activity 2.小浮动窗口view界面 3.大浮动窗口view界面 对于浮动窗口的管理我们还需要 4.一个Service(在后台监控管理浮动窗口的状态) 5.窗口管理类(创建/消除浮动窗口) 代码: package com.ww.

[Android游戏开发学习笔记]View和SurfaceView

本文为阅读http://blog.csdn.net/xiaominghimi/article/details/6089594的笔记. 在Android游戏中充当主要角色的,除了控制类就是显示类.而在Android中涉及到显示的是View类,及继承自它的SurfaceView类和SurfaceView的其他子类等. 这里先只说View和SurfaceView.SurfaceView的直接子类有GLSurfaceView和VideoView,可以看出GL和视频播放以及CAmera摄像头一般均使用Su

Android自定义View学习笔记04

Android自定义View学习笔记04 好长时间没有写相关的博客了,前几周在帮学姐做毕设,所以博客方面有些耽误.过程中写了一个类似wp的磁贴的view,想再写个配套的layout,所以昨天看了一下自定义viewGroup的相关知识-晚上睡觉想了一下可行性不是很高-代码量还不如直接自己在xml上写来得快,速度上也是个问题.今天看了一下张鸿洋老师的Android 自定义View (三) 圆环交替 等待效果这篇博文,再加上前一段时间看到的一幅图,结合之前写的一个圆形imageView的实现博文And

Android Socket编程学习笔记

通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.在Internet上的主机一般运行了多个服务软件,同时提供几种服务.每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务. 网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接.Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定. 在java中,Socke

Android自定义view学习笔记02

Android自定义view学习笔记02 本文代码来自于张鸿洋老师的博客之Android 自定义View (二) 进阶 学习笔记,对代码进行些许修改,并补充一些在coding过程中遇到的问题.学习的新东西. 相关代码 //CustomImageView.java package mmrx.com.myuserdefinedview.textview; import android.content.Context; import android.content.res.TypedArray; im

VS2013中Python学习笔记[Django Web的第一个网页]

前言 前面我简单介绍了Python的Hello World.看到有人问我搞搞Python的Web,一时兴起,就来试试看. 第一篇 VS2013中Python学习笔记[环境搭建] 简单介绍Python环境的搭建过程,以及Hello World的实现. 第二篇 VS2013中Python学习笔记[基础入门] 我简单学习使用了Python的几个基础的知识点. 第一个Web页面 第一步:首先打开VS2013开发工具 ,新建项目,选择Django Project模版. 修改项目名称,可以查看到项目的文件结

Android自定义View学习笔记03

Android自定义View学习笔记03 预备知识 BitMap类 BitMap位图类,其中有一个嵌套类叫Bitmap.Config,内部有四个枚举值.这个类的作用是定义位图存储质量,即存储一个像素的位数,以及是否能显示透明.半透明颜色(Possible bitmap configurations. A bitmap configuration describes how pixels are stored. This affects the quality (color depth) as w

Android V7包学习笔记更新中.....

关于V4 V7 V13 VX包介绍转自这里 1, Android Support V4, V7, V13是什么? 本质上就是三个java library. 2, 为什么要有support库? 如果在低版本Android平台上开发一个应用程序,而应用程序又想使用高版本才拥有的功能,就需要使用Support库. 3, 三个Support 库的区别和作用是什么? Android Support v4 是最早(2011年4月份)实现的库.用在Android1.6 (API lever 4)或者更高版本之

android JNI入门-学习笔记

JNI入门-学习笔记 可执行文件 Windows - *.exe | linux - *.elf c函数库文件 Windows - *.dll | linux - *.so 批处理文件 Windows - *.bat | linux - *.sh 工具 NDK -- native developer kits Cygwin -- Linux系统模拟器 安装过程要点: --安装时可以联网安装也可以通过本地文件安装(如果有本地文件) --Select Packages:没必要全部安装,安装Devel