前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >android activitymanager 系统api_Android view

android activitymanager 系统api_Android view

作者头像
全栈程序员站长
发布2022-10-04 17:53:21
4980
发布2022-10-04 17:53:21
举报

大家好,又见面了,我是你们的朋友全栈君。

ActivityManager服务是对Activity管理、运行时功能管理和运行时数据结构的封装,进程(Process)、应用程序/包、服务(Service)、任务(Task)信息等。包括以下功能:

  • 激活/去激活activity
  • 注册/取消注册动态接受intent
  • 发送/取消发送intent
  • activity生命周期管理(暂停,恢复,停止,销毁等)
  • activity task管理(前台->后台,后台->前台,最近task查询,运行时task查询)
  • 激活/去激活service
  • 激活/去激活provider等

常用内部静态类有:

ActivityManager.MemoryInfo: 系统可用内存信息

ActivityManager.RecentTaskInfo: 最近的任务信息

ActivityManager.RunningAppProcessInfo: 正在运行的进程信息

ActivityManager.RunningServiceInfo: 正在运行的服务信息

ActivityManager.RunningTaskInfo: 正在运行的任务信息

image
image
image
image

用法:

1.获取ActivityManager服务:

ActivityManager mActivityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);

2.获取内存信息:

MemoryInfo memoryInfo = new MemoryInfo() ; mActivityManager.getMemoryInfo(memoryInfo);

3.获取正在运行的task信息:

List<RunningTaskInfo> runningTaskInfos = mActivityManager.getRunningTasks(Integer.MAX_VALUE); String cmpNameTemp = null; if (null != runningTaskInfos) { cmpNameTemp = (runningTaskInfos.get(0).topActivity).toString(); }

代码语言:javascript
复制
4.判断android应用是否在前台:

public static boolean isAppOnForeground(Context context) { ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); String packageName = context.getPackageName(); List<RecentTaskInfo> appTask = activityManager.getRecentTasks(Integer.MAX_VALUE, 1); if (appTask == null) { return false; } if (appTask.get(0).baseIntent.toString().contains(packageName)) { return true; } return false; }

代码语言:javascript
复制
5.获取android手机内安装的所有桌面:

private static List<String> getAllTheLauncher(Context context) { List<String> names = null; PackageManager pkgMgt = context.getPackageManager(); Intent it = new Intent(Intent.ACTION_MAIN); it.addCategory(Intent.CATEGORY_HOME); List<ResolveInfo> ra = pkgMgt.queryIntentActivities(it, 0); if (ra.size() != 0) { names = new ArrayList<String>(); } for (int i = 0; i < ra.size(); i++) { String packageName = ra.get(i).activityInfo.packageName; names.add(packageName); } return names; }

6.判断程序前后台状态:

public static boolean isLauncherRunning(Context context) { boolean result = false; List<String> names = getAllTheLauncher(context); ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningAppProcessInfo> appList = mActivityManager.getRunningAppProcesses(); for (RunningAppProcessInfo running : appList) { if (running.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { for (int i = 0; i < names.size(); i++) { if (names.get(i).equals(running.processName)) { result = true; break; } } } } return result; }

代码语言:javascript
复制
7.获取系统中进程信息:

private void getRunningAppProcessInfo() { processInfoList = new ArrayList<ProcessInfo>();

List<ActivityManager.RunningAppProcessInfo> appProcessList = mActivityManager.getRunningAppProcesses();

for (ActivityManager.RunningAppProcessInfo appProcessInfo : appProcessList) {

int pid = appProcessInfo.pid;

int uid = appProcessInfo.uid;

String processName = appProcessInfo.processName;

int[] myMempid = new int[] { pid };

Debug.MemoryInfo[] memoryInfo = mActivityManager.getProcessMemoryInfo(myMempid);

int memSize = memoryInfo[0].dalvikPrivateDirty;

Log.i(TAG, “processName: ” + processName + ” pid: ” + pid

+ ” uid:” + uid + ” memorySize is –>” + memSize + “kb”);

// 构造一个ProcessInfo对象

ProcessInfo processInfo = new ProcessInfo();

processInfo.setPid(pid);

processInfo.setUid(uid);

processInfo.setMemSize(memSize);

processInfo.setPocessName(processName);

processInfoList.add(processInfo);

// 获得每个进程里运行的应用程序(包),即每个应用程序的包名

String[] packageList = appProcessInfo.pkgList;

Log.i(TAG, “process id is ” + pid + “has ” + packageList.length);

for (String pkg : packageList) {

Log.i(TAG, “packageName ” + pkg + ” in process id is –>”+ pid);

}

}

}

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022年9月7日 下,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档