Android中ActivityManager学习笔记(1)-MemoryInfo「建议收藏」

Android中ActivityManager学习笔记(1)-MemoryInfo「建议收藏」ActivityManager       与系统中所有的Activity进行交互的类。官网一句话解释了这个东西,但是有点随意了。ActivityManager的作用很多,我们通过它获得内存信息,进程信息,还可以终止某个进程。当然啦,只能终止用户的进程,系统的进程是杀死不了的。下面我通过实例,一步一步学习它的具体作用,我也是刚学,不能从宏观的角度给大家解释清楚它的具体作用。希望通过程序一

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

 ActivityManager

      

  与系统中所有的Activity进行交互的类。官网一句话解释了这个东西,但是有点随意了。ActivityManager的作用很多,我们通过它获得内存信息,进程信息,还可以终止某个进程。当然啦,只能终止用户的进程,系统的进程是杀死不了的。下面我通过实例,一步一步学习它的具体作用,我也是刚学,不能从宏观的角度给大家解释清楚它的具体作用。希望通过程序一步一步的写下去,其每个方法的作用也就清楚了,从而我们就知道它能干什么啦。语言组织能力差,所以就用代码来解释吧。

        首先我们创建一个程序,在入口Activity里的onCreate()方法里,我们来创建ActivityManager.

 

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

       

从系统服务里得到我们的ActivityManger对象.在官方文档中,并没有提供构造方法,所以我们不能通过new的方式创建该对象,由于ActivityManager是核心服务,所以android从系统服务里得到它的实例。

 

获取手机的内存信息MemoryInfo

 

MemoryInfo memInfo = new MemoryInfo();//存放内存信息的对象
activityManager.getMemoryInfo(memInfo);//传入参数,将获得数据保存在memInfo对象中
long availMem = memInfo.availMem/1000000;//可用内存
boolean isLowMem = memInfo.lowMemory;//是否达到最低内存
long threshold = memInfo.threshold/1000000;//临界值,达到这个值,进程就要被杀死
long totalMem = memInfo.totalMem/1000000;//总内存
Log.i(TAG, "avail:" + availMem + ",isLowMem:" + isLowMem + ",threshold:" + threshold + ",totalMem:" + totalMem);

 

在ActivityManager的getMemoryInfo的方法中需要传入一个MemoryInfo类,该类为ActivityManager内部类,手机的内存信息就保存在这个类中。然后通过MemoryInfo类中的方法,获得我们想要的信息。运行程序输出结果如下:

Android中ActivityManager学习笔记(1)-MemoryInfo「建议收藏」

 

然后我们在调用一下清楚用户数据的方法:

 

activityManager.clearApplicationUserData()//清楚当前应用的用户数据

 

放在刚才获取内存的数据前面,我们看看清除当前应用的用户数据以后,我们的内存大小:

 

Android中ActivityManager学习笔记(1)-MemoryInfo「建议收藏」

可以看出我们清除了1M的用户数据。

 

系统各个进程的信息RunningAppProcessInfo

 

List<RunningAppProcessInfo> list1 = activityManager.getRunningAppProcesses();
for(RunningAppProcessInfo info :list1){
int importance = info.importance;//通过给进程标值来给进程分类,越重要的进程,那么数值就越低
Log.i(TAG, "importance: "+importance);
int importanceReasonCode = info.importanceReasonCode;//重要性的原因,也是通过数值去判断。
Log.i(TAG, "importanceReasonCode: "+importanceReasonCode);
ComponentName impoartanceReasonComponent = info.importanceReasonComponent;//重要性原因的组件,返回一个ComponentName的对象。
Log.i(TAG, "impoartanceReasonComponent: "+impoartanceReasonComponent);
int importanceReasonPid = info.importanceReasonPid;//其他客户端进程的进程id号,如果没有其他进程返回0
Log.i(TAG, "importanceReasonPid : "+importanceReasonPid);
int lastTrimLevel = info.lastTrimLevel;//提供给ComponentCallbacks2.onTrimMemory(int)方法的参数。上一次提交给进程的内饰水平
Log.i(TAG, "lastTrimLevel: "+lastTrimLevel);
int lru = info.lru;//在一个特殊的进程中,提供更精细密度的衡量值,目前只维护IMPORTANCE_BACKGROUND
Log.i(TAG, "lru :"+lru);
int pid = info.pid;//进程id
Log.i(TAG, "pid :"+pid);
String proName = info.processName;//进程名
Log.i(TAG, "proName : " + proName);
int uid = info.uid;//用户id
Log.i(TAG, "uid : " + uid);
Log.i(TAG, "================================");  }                                                                                    

 

运行程序得到输出,截取一部分如下:

 

03-27 14:24:54.460: I/MainActivity(7647): importance: 100
03-27 14:24:54.460: I/MainActivity(7647): importanceReasonCode: 0
03-27 14:24:54.460: I/MainActivity(7647): impoartanceReasonComponent: null
03-27 14:24:54.460: I/MainActivity(7647): importanceReasonPid : 0
03-27 14:24:54.460: I/MainActivity(7647): lastTrimLevel: 0
03-27 14:24:54.460: I/MainActivity(7647): lru :0
03-27 14:24:54.460: I/MainActivity(7647): pid :7647
03-27 14:24:54.460: I/MainActivity(7647): proName : com.ibm.activitymanager
03-27 14:24:54.470: I/MainActivity(7647): uid : 10072
03-27 14:24:54.470: I/MainActivity(7647): ================================
03-27 14:24:54.470: I/MainActivity(7647): importance: 130
03-27 14:24:54.470: I/MainActivity(7647): importanceReasonCode: 0
03-27 14:24:54.470: I/MainActivity(7647): impoartanceReasonComponent: null
03-27 14:24:54.470: I/MainActivity(7647): importanceReasonPid : 0
03-27 14:24:54.480: I/MainActivity(7647): lastTrimLevel: 0
03-27 14:24:54.480: I/MainActivity(7647): lru :0
03-27 14:24:54.480: I/MainActivity(7647): pid :836
03-27 14:24:54.480: I/MainActivity(7647): proName : com.android.launcher3
03-27 14:24:54.480: I/MainActivity(7647): uid : 10053
03-27 14:24:54.480: I/MainActivity(7647): ================================
03-27 14:24:54.480: I/MainActivity(7647): importance: 400
03-27 14:24:54.480: I/MainActivity(7647): importanceReasonCode: 0
03-27 14:24:54.480: I/MainActivity(7647): impoartanceReasonComponent: null
03-27 14:24:54.480: I/MainActivity(7647): importanceReasonPid : 0
03-27 14:24:54.480: I/MainActivity(7647): lastTrimLevel: 0
03-27 14:24:54.480: I/MainActivity(7647): lru :0
03-27 14:24:54.490: I/MainActivity(7647): pid :770
03-27 14:24:54.490: I/MainActivity(7647): proName : com.android.settings
03-27 14:24:54.490: I/MainActivity(7647): uid : 1000
03-27 14:24:54.490: I/MainActivity(7647): ================================
03-27 14:24:54.490: I/MainActivity(7647): importance: 400
03-27 14:24:54.490: I/MainActivity(7647): importanceReasonCode: 0
03-27 14:24:54.490: I/MainActivity(7647): impoartanceReasonComponent: null
03-27 14:24:54.500: I/MainActivity(7647): importanceReasonPid : 0
03-27 14:24:54.500: I/MainActivity(7647): lastTrimLevel: 0
03-27 14:24:54.500: I/MainActivity(7647): lru :1
03-27 14:24:54.500: I/MainActivity(7647): pid :1092
03-27 14:24:54.500: I/MainActivity(7647): proName : com.android.mms
03-27 14:24:54.500: I/MainActivity(7647): uid : 10009
03-27 14:24:54.500: I/MainActivity(7647): ================================
03-27 14:24:54.500: I/MainActivity(7647): importance: 400
03-27 14:24:54.500: I/MainActivity(7647): importanceReasonCode: 0
03-27 14:24:54.500: I/MainActivity(7647): impoartanceReasonComponent: null
03-27 14:24:54.500: I/MainActivity(7647): importanceReasonPid : 0
03-27 14:24:54.500: I/MainActivity(7647): lastTrimLevel: 0
03-27 14:24:54.500: I/MainActivity(7647): lru :1
03-27 14:24:54.500: I/MainActivity(7647): pid :1353
03-27 14:24:54.500: I/MainActivity(7647): proName : com.baidu.appsearch
03-27 14:24:54.500: I/MainActivity(7647): uid : 10073
03-27 14:24:54.500: I/MainActivity(7647): ================================
03-27 14:24:54.510: I/MainActivity(7647): importance: 400
03-27 14:24:54.510: I/MainActivity(7647): importanceReasonCode: 0
03-27 14:24:54.510: I/MainActivity(7647): impoartanceReasonComponent: null
03-27 14:24:54.510: I/MainActivity(7647): importanceReasonPid : 0
03-27 14:24:54.510: I/MainActivity(7647): lastTrimLevel: 0
03-27 14:24:54.510: I/MainActivity(7647): lru :1
03-27 14:24:54.510: I/MainActivity(7647): pid :2131
03-27 14:24:54.510: I/MainActivity(7647): proName : com.android.defcontainer
03-27 14:24:54.510: I/MainActivity(7647): uid : 10004
03-27 14:24:54.510: I/MainActivity(7647): ================================
03-27 14:24:54.520: I/MainActivity(7647): importance: 300
03-27 14:24:54.520: I/MainActivity(7647): importanceReasonCode: 0
03-27 14:24:54.530: I/MainActivity(7647): impoartanceReasonComponent: null
03-27 14:24:54.530: I/MainActivity(7647): importanceReasonPid : 0
03-27 14:24:54.530: I/MainActivity(7647): lastTrimLevel: 0
03-27 14:24:54.530: I/MainActivity(7647): lru :0
03-27 14:24:54.530: I/MainActivity(7647): pid :979
03-27 14:24:54.530: I/MainActivity(7647): proName : com.infinit.wostore.ui
03-27 14:24:54.540: I/MainActivity(7647): uid : 10071
03-27 14:24:54.540: I/MainActivity(7647): ================================
03-27 14:24:54.540: I/MainActivity(7647): importance: 400
03-27 14:24:54.540: I/MainActivity(7647): importanceReasonCode: 0
03-27 14:24:54.550: I/MainActivity(7647): impoartanceReasonComponent: null
03-27 14:24:54.550: I/MainActivity(7647): importanceReasonPid : 0
03-27 14:24:54.550: I/MainActivity(7647): lastTrimLevel: 0
03-27 14:24:54.550: I/MainActivity(7647): lru :3
03-27 14:24:54.550: I/MainActivity(7647): pid :1712
03-27 14:24:54.550: I/MainActivity(7647): proName : com.android.quicksearchbox
03-27 14:24:54.550: I/MainActivity(7647): uid : 10054
03-27 14:24:54.550: I/MainActivity(7647): ================================

 

获取进程中的错误信息ProcessErrorStateInfo

 

List<ProcessErrorStateInfo> list2 = activityManager.getProcessesInErrorState();
if (list2 != null) {
for (ProcessErrorStateInfo info : list2) {
int condition = info.condition;// 进程进入的条件
Log.i(TAG, "condition: " + condition);
byte[] data = info.crashData;// crash数据
if (data != null) {
Log.i(TAG, "data: " + data.toString());
} else {
Log.i(TAG, "data: null");
}
String longMsg = info.longMsg;// 对条件condition的描述
Log.i(TAG, "longMsg: " + longMsg);
int pid = info.pid;// 进程id
Log.i(TAG, "pid: " + pid);
String proName = info.processName;// 进程名
Log.i(TAG, "proName: " + proName);
String shortMsg = info.shortMsg;
Log.i(TAG, "shortMsg: " + shortMsg);
String sTrace = info.stackTrace;// 堆栈追踪到的信息
Log.i(TAG, "sTrace: " + sTrace);
String tag = info.tag;// activity名是否与错误有关联
Log.i(TAG, "tag: " + tag);
int uid = info.uid;
Log.i(TAG, "uid: " + uid);
int describeContents = info.describeContents();// 数据包裹的描述
Log.i(TAG, "describeContents: " + describeContents);
	}
}

 

可惜,获得信息为空,也就无法打印信息查看。

 

获取任务信息RunningTaskInfo

 

List<RunningTaskInfo> list3 = activityManager.getRunningTasks(10);
		if (list3 != null) {
			for (RunningTaskInfo info : list3) {
				ComponentName baseActivity = info.baseActivity;//任务主activity名
				Log.i(TAG, "baseActivity: " + baseActivity);
				CharSequence description = info.description;//任务的描述
				if(description!=null){
					Log.i(TAG, "description: " + description.toString());
				}else{
					Log.i(TAG, "description: null" );
				}
				int id = info.id;//任务的id号
				Log.i(TAG, "id: " + id);
				int numActivity = info.numActivities;//该任务的activity的数量
				Log.i(TAG, "numActivity: " + numActivity);
				int numRunning = info.numRunning;//当前活动的activity数量
				Log.i(TAG, "numRunning: " + numRunning);
				Bitmap bitmap = info.thumbnail;//缩略图
				Log.i(TAG, "bitmap: " + bitmap);
				ComponentName topActivity = info.topActivity;//当前活动activity中处于最顶端的activity
				Log.i(TAG, "topActivity: " + topActivity);
				int content = info.describeContents();//描述文本
				Log.i(TAG, "content: " + content);
				Log.i(TAG, "================================");
			}
		}

获取任务的方法需要添加权限:

 

<uses-permission android:name="android.permission.GET_TASKS"/>

运行程序输出信息如下:

 

03-27 16:05:18.990: I/MainActivity(10997): baseActivity: ComponentInfo{com.ibm.activitymanager/com.ibm.activitymanager.MainActivity}
03-27 16:05:18.990: I/MainActivity(10997): description: null
03-27 16:05:18.990: I/MainActivity(10997): id: 43
03-27 16:05:18.990: I/MainActivity(10997): numActivity: 1
03-27 16:05:18.990: I/MainActivity(10997): numRunning: 1
03-27 16:05:18.990: I/MainActivity(10997): bitmap: null
03-27 16:05:18.990: I/MainActivity(10997): topActivity: ComponentInfo{com.ibm.activitymanager/com.ibm.activitymanager.MainActivity}
03-27 16:05:18.990: I/MainActivity(10997): content: 0
03-27 16:05:18.990: I/MainActivity(10997): ================================
03-27 16:05:18.990: I/MainActivity(10997): baseActivity: ComponentInfo{com.android.launcher3/com.android.launcher3.Launcher}
03-27 16:05:18.990: I/MainActivity(10997): description: null
03-27 16:05:18.990: I/MainActivity(10997): id: 1
03-27 16:05:18.990: I/MainActivity(10997): numActivity: 1
03-27 16:05:18.990: I/MainActivity(10997): numRunning: 1
03-27 16:05:18.990: I/MainActivity(10997): bitmap: null
03-27 16:05:19.000: I/MainActivity(10997): topActivity: ComponentInfo{com.android.launcher3/com.android.launcher3.Launcher}
03-27 16:05:19.000: I/MainActivity(10997): content: 0
03-27 16:05:19.000: I/MainActivity(10997): ================================
03-27 16:05:19.000: I/MainActivity(10997): baseActivity: ComponentInfo{com.sohu.newsclient/com.sohu.newsclient.app.SplashActivity}
03-27 16:05:19.000: I/MainActivity(10997): description: null
03-27 16:05:19.000: I/MainActivity(10997): id: 39
03-27 16:05:19.000: I/MainActivity(10997): numActivity: 2
03-27 16:05:19.000: I/MainActivity(10997): numRunning: 2
03-27 16:05:19.000: I/MainActivity(10997): bitmap: null
03-27 16:05:19.000: I/MainActivity(10997): topActivity: ComponentInfo{com.sohu.newsclient/com.sohu.newsclient.app.NewsTabActivity}
03-27 16:05:19.000: I/MainActivity(10997): content: 0
03-27 16:05:19.000: I/MainActivity(10997): ================================
03-27 16:05:19.000: I/MainActivity(10997): baseActivity: ComponentInfo{com.android.settings/com.android.settings.Settings}
03-27 16:05:19.000: I/MainActivity(10997): description: null
03-27 16:05:19.000: I/MainActivity(10997): id: 14
03-27 16:05:19.000: I/MainActivity(10997): numActivity: 1
03-27 16:05:19.000: I/MainActivity(10997): numRunning: 1
03-27 16:05:19.000: I/MainActivity(10997): bitmap: null
03-27 16:05:19.000: I/MainActivity(10997): topActivity: ComponentInfo{com.android.settings/com.android.settings.Settings}
03-27 16:05:19.000: I/MainActivity(10997): content: 0
03-27 16:05:19.000: I/MainActivity(10997): ================================

 

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • GTM(Global Traffic Manager)和GSLB(Global Server Load Balancing)服务介绍「建议收藏」

    GTM(Global Traffic Manager)和GSLB(Global Server Load Balancing)服务介绍「建议收藏」最近看到一篇关于GSLB的文章,写的非常不错,学习了一下,这里做一些记录。一、GTM介绍GTM(GlobalTrafficManager的简写)即全局流量管理,基于网宿智能DNS、分布式监控体系,实现实时故障切换及全球负载均衡,保障应用服务的持续高可用性。GTM基于资源的健康状况及流量负载做智能调度决策,为用户提供最佳访问IP。网宿GTM,提供更可靠、稳定和安全的流量调度服务,助您轻松…

    2022年6月4日
    37
  • Java中,为什么byte类型的取值范围为-128~127?

    Java中,为什么byte类型的取值范围为-128~127?在学习Java基础语法的时候,初学者的我们可能都会有这么一个疑问为什么byte类型的取值范围为什么是[-128,127]而不是[-127,127]。01111111表示最大的数值:127,因为第一位是符号位,所以11111111应该是最小的数值:-127,不是这样才对?在解释这个问题之前我们需要了解几个概念:机器数、真值、原码、反码、补码机器数:一个数在计算机中的二进制表示形式,叫做这个数的机器

    2022年6月15日
    23
  • IE无法打开internet网站已终止操作的解决的方法

    IE无法打开internet网站已终止操作的解决的方法

    2021年12月4日
    57
  • 解决linux下sudo更改文件权限报错xxxis not in the sudoers file. This incident will be reported.

    解决linux下sudo更改文件权限报错xxxis not in the sudoers file. This incident will be reported.本文转自Linux社区作者为z-sm的文章原文链接http://www.linuxidc.com/Linux/2016-07/133066.htmLinux中普通用户用sudo执行命令时报”xxxisnotinthesudoersfile.Thisincidentwillbereported”错误,解决方法就是在/etc/sudoers文件里给该用户添加权限。如下:1.切换到

    2022年6月20日
    27
  • STM32驱动LCD1602程序(调试已成功)「建议收藏」

    STM32驱动LCD1602程序(调试已成功)「建议收藏」IO接线:RSPA8RWPB6EPB7LCD1602_IOPB8-PB15所有的口都配置成开漏输出,并且所有的口都通过10k电阻上拉至5V,部分电路图如下:程序代码LCD1602.C#include”lcd1602.h”voidLCD1602_GPIO_Init_Out()//LCD1602端口初始化,配置为输出{ GPIO_InitTypeDefGPIO_InitStructrue; RCC_APB2PeriphClockCmd(LCD1602_Timer_GPI

    2022年7月16日
    20
  • 深入浅出python第二版PDF_python数据分析

    深入浅出python第二版PDF_python数据分析内容介绍热点排行相关文章下载地址↓中文名:深入浅出Python原名:深入浅出Python作者:巴里图书分类:网络资源格式:PDF版本:扫描版出版社:东南大学出版社书号:9787564126759发行时间:2011年5月地区:英国语言:英文简介:内容简介:你是否想过通过一本书来学习Python?《深入浅出Python))通过一种独特的超越语法手册的方式来帮助你学习Python。…

    2022年10月17日
    0

发表回复

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

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