ActivityManagerService(AMS),而这些功能大部分是在native层实现的。
)
//获取内存信息//MemoryInfo比较重要的属性// availMem:系统当前可用内存// totalMem:系统总的内存// threshold:系统判定自己内存不足的阀值,即临界值。低于该值时,系统会开始杀死一些优先级较低的服务和进程。// lowMemory:当前是否处于第内存状态,若当前可用内存<=threshold,lowMemory为true
ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo(); mActivityManager.getMemoryInfo(memoryInfo);
//获取正在运行的进程信息//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(); //获取正在运行的服务信息//官方文档中建议只在debug时使用该API,不要有重要的代码逻辑基于此API的结果//RunningServiceInfo属性// activeSince:服务第一次被激活的时间 (启动和绑定方式)// foreground: 是否为前台服务// lastActivityTime:最后一个Activity与服务绑定的时间// service:服务的组件名称// started:若此值为true,则表示服务已经在启动运行中
List serviceInfoList = mActivityManager.getRunningServices(Integer.MAX_VALUE); //获取正在运行的任务栈信息//官方文档中建议只在debug时使用该API,不要有重要的代码逻辑基于此API的结果//需要权限:
//RunningTaskInfo重要属性// baseActivity:栈底Activity// topActivity:栈顶Activity// numActivities: 栈中的全部Activity数量,包含已停止的// numRunning,任务中运行中的Activity数量,不包含已停止的
List taskInfoList = mActivityManager.getRunningTasks(Integer.MAX_VALUE); 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
