Android ActivityManager一些API介绍

Android ActivityManager一些API介绍Android 中 Java 层的 ActivityMana 类中封装了很多 API 可以供我们查询当前系统的很多信息 包括 内存 进程 Process 任务栈 Task 服务 Service 等的相关信息 利用这些信息可以进行一些有用的判断 例如判断当前系统内存是否不足 指定 Service 是否在运行中 ActivityMana 类封装了很多 API 方法供上层调用 具体负责管理 Activity Service 等组件的是 ActivityMana AMS

    Android中Java层的ActivityManager类中封装了很多API,可以供我们查询当前系统的很多信息,包括:内存、进程(Process)、任务栈(Task)、服务(Service)等的相关信息。
    利用这些信息可以进行一些有用的判断,例如判断当前系统内存是否不足、指定Service是否在运行中。
    (ActivityManager类封装了很多API方法供上层调用,具体负责管理Activity、Service等组件的是
ActivityManagerService(AMS),而这些功能大部分是在native层实现的。
1.获取内存信息
//获取内存信息
//MemoryInfo比较重要的属性
//          availMem:系统当前可用内存
//          totalMem:系统总的内存
//          threshold:系统判定自己内存不足的阀值,即临界值。低于该值时,系统会开始杀死一些优先级较低的服务和进程。
//          lowMemory:当前是否处于第内存状态,若当前可用内存<=threshold,lowMemory为true
ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo(); mActivityManager.getMemoryInfo(memoryInfo);
2.获取正在运行的进程信息
//获取正在运行的进程信息
//RunningAppProcessInfo重要属性
//    importance:进程在系统中的优先级,值越低进程越不容易被杀死
//    importanceReasonCode:进程的重要原因代码
//    importanceReasonComponent:进程中组件的描述信息
//    pkgList:被载入当前进程的所有包名
//    processName:当前进程的名称
        以下为Android常见的优先级对应值,值越低,对应的优先级越高,进程就越不容易被系统杀死:
*      ActivityManager.RunningAppProcessInfo.
*                       IMPORTANCE_FOREGROUND=100,         运行着前台组件(可交互),或绑定前台组件的Service
*                       IMPORTANCE_FOREGROUND_SERVICE=125, 运行着前台Service
*                       IMPORTANCE_VISIBLE=200,            可见进程(有组件可见不可交互,或有绑定此类组件的Service)
*                       IMPORTANCE_SERVICE=300,
*                       IMPORTANCE_TOP_SLEEPING=325,
*                       IMPORTANCE_CACHED=400,
*                       IMPORTANCE_EMPTY=500,
*                       IMPORTANCE_GONE=1000


















List         processInfoList = mActivityManager.getRunningAppProcesses();    
3.获取正在运行的服务信息
//获取正在运行的服务信息
//官方文档中建议只在debug时使用该API,不要有重要的代码逻辑基于此API的结果
//RunningServiceInfo属性
//        activeSince:服务第一次被激活的时间 (启动和绑定方式)
//        foreground: 是否为前台服务
//        lastActivityTime:最后一个Activity与服务绑定的时间
//        service:服务的组件名称
//        started:若此值为true,则表示服务已经在启动运行中
List         serviceInfoList = mActivityManager.getRunningServices(Integer.MAX_VALUE);    
4.获取正在运行的任务栈信息
//获取正在运行的任务栈信息
//官方文档中建议只在debug时使用该API,不要有重要的代码逻辑基于此API的结果
//需要权限:
//RunningTaskInfo重要属性
//        baseActivity:栈底Activity
//        topActivity:栈顶Activity
//        numActivities: 栈中的全部Activity数量,包含已停止的
//        numRunning,任务中运行中的Activity数量,不包含已停止的
List         taskInfoList = mActivityManager.getRunningTasks(Integer.MAX_VALUE);    
#.其它一些API
getDeviceConfigurationInfo () :获取设备信息
getProcessMemoryInfo(int[] pids):返回一个或多个进程当前的内存使用信息
killBackgroundProcesses(String packageName) :根据包名杀死对应进程
clearApplicationUserData() :清除当前App在内部存储空间中的缓存数据,等同于在手机设置中清除用户数据。
getAppTasks() :获取当前应用相关的任务栈列表
addAppTask (Activity activity, Intent intent, ActivityManager.TaskDescription description, Bitmap thumbnail) :为Activity创建新的任务栈,activity(需要创建任务栈的Activity),intent(用于跳转页面的Intent),description(描述信息),thumbnail(缩略图)
getLauncherLargeIconSize () : 获取Launcher(启动器)图标大小
isUserAMonkey() :是否用户是否像“猴子”一样快速不断点击
.应用示例
/ * 获取指定APP包名对应的进程的优先级 *    APP包名对应的进程是其默认进程名,一般为其最主要的进程。而且大多数APP只有这一个进程。 *      以下为Android常见的优先级对应值,值越低,对应的优先级越高,进程就越不容易被系统杀死: *      ActivityManager.RunningAppProcessInfo. *                       IMPORTANCE_FOREGROUND=100,         运行着前台组件(可交互),或绑定前台组件的Service *                       IMPORTANCE_FOREGROUND_SERVICE=125, 运行着前台Service *                       IMPORTANCE_VISIBLE=200,            可见进程(有组件可见不可交互,或有绑定此类组件的Service) *                       IMPORTANCE_SERVICE=300, *                       IMPORTANCE_TOP_SLEEPING=325, *                       IMPORTANCE_CACHED=400, *                       IMPORTANCE_EMPTY=500, *                       IMPORTANCE_GONE=1000 * @param packageName * @return */ public int getAppProcessImportance(Context context, String packageName){     if(context == null || TextUtils.isEmpty(packageName)){         return Integer.MAX_VALUE;     }     init(context);     List         processList = mActivityManager.getRunningAppProcesses();     if(processList == null || processList.size() == 0){         return Integer.MAX_VALUE;     }     for(ActivityManager.RunningAppProcessInfo processInfo : processList){         if(processInfo == null || TextUtils.isEmpty(processInfo.processName)){             continue;         }         if(processInfo.processName.equals(packageName)){             return processInfo.importance;         }     }     return Integer.MAX_VALUE; }    

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214923.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午3:07
下一篇 2026年3月18日 下午3:08


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号