在Android中ActivityManager主要用于和系统中运行的Activities进行交互。在本篇文章中,我们将对ActivityManager中的API进行研究使用。

  在ActivityManager存在如下几个内部类:

1、ActivityManager.MemoryInfo:此类用于描述系统内存信息,可以通过ActivityManager的getMemoryInfo获取。在该类中通过字段     availMem   和totalMem,可以获取系统当前可用内存和系统总内存。

2、ActivityManager.RunningAppProcessInfo:用于描述一个正在运行的进程的信息。常用属性有inportance、pid、processName、uid等。

3、ActivityManager.RunningServiceInfo:用于描述正在运行的服务的信息。

4、ActivityManager.RunningTaskInfo:用于描述正运行在系统中的task的信息。不仅仅包括含有正在运行的进程的Task,还包含了只保留了状态用于用户重启的task。

5、ActivityManager.RecentTaskInfo:用于描述最近访问过的task信息。

除了这些内部类,还有一些常用的方法,比如:

1、getMemoryInfo(ActivityManager.MemoryInfo outInfo)

2、getProcessMemoryInfo(int[] pids)

3、getRecentTasks(int maxNum,int flags)

4、getRunningAppProcesses();

5、getRunningService(int maxNum)

6、getRunningTasks(int maxNum);

7、killBackgroundProcess(String packageName)

  等等。

下面我们通过一个案例,来说明他们的具体用法,具体效果图如下:

在此案例中,我们完成将扫描出所有的正在运行的进程,并对其进行清理内存。

首先,我们先看祝布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <LinearLayout
android:layout_width="match_parent"
android:layout_height="48dp"
android:orientation="horizontal"> <Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:onClick="startScan"
android:text="扫描"
android:textSize="18sp" /> <Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:onClick="startClean"
android:text="清理"
android:textSize="18sp" />
</LinearLayout> <TextView
android:id="@+id/memoryInfo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="10dp"
android:text="@string/hello_world"
android:textSize="14sp" /> <FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"> <ListView
android:id="@+id/mylist"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbarStyle="outsideOverlay" /> <LinearLayout
android:id="@+id/progressContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"> <com.github.lzyzsd.circleprogress.ArcProgress
android:id="@+id/progress"
android:layout_width="80dp"
android:layout_height="80dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/progressText"
android:textSize="18sp"
android:gravity="center"/> </LinearLayout>
</FrameLayout> </LinearLayout>

其次,在Activity中定义了一个异步任务类用于处理正在运行中的进程,其代码如下:

private class ScanRunningProcess extends AsyncTask<Void,Integer,List<ProcessInfo>>{
@Override
protected List<ProcessInfo> doInBackground(Void... voids) {
List<ActivityManager.RunningAppProcessInfo> list =
activityManager.getRunningAppProcesses();
publishProgress(0,list.size());
List<ProcessInfo> processInfos = new ArrayList<>();
for(int i=0;i<list.size();i++){ publishProgress(i+1,list.size());
ActivityManager.RunningAppProcessInfo appProcessInfo=
list.get(i);
ProcessInfo info = new ProcessInfo();
info.setProcessName(appProcessInfo.processName);
//内存信息
Debug.MemoryInfo[] memoryInfos=
activityManager.getProcessMemoryInfo(new int[]{appProcessInfo.pid});
info.setMemory(memoryInfos[0].getTotalPrivateDirty()*1024);
processInfos.add(info);
}
return processInfos;
} @Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
int curProgress = values[0];
int totalProgress = values[1];
progressText.setText(String.format("扫描进度:%d/%d",curProgress,totalProgress));
arcProgress.setMax(100);
int progress = (int)(curProgress*100.0/totalProgress);
arcProgress.setProgress(progress);
} @Override
protected void onPostExecute(List<ProcessInfo> list) {
super.onPostExecute(list);
progressContainer.setVisibility(View.GONE);
mData.clear();
mData.addAll(list);
adapter.notifyDataSetChanged();
} @Override
protected void onPreExecute() {
super.onPreExecute();
progressContainer.setVisibility(View.VISIBLE);
progressText.setText("正在扫描……");
}
}
清理内存的关键代码如下:
for(ProcessInfo info : mData) {
activityManager.killBackgroundProcesses(info.getProcessName());
cleanMemory += info.getMemory(); }
作者:杰瑞教育
出处:http://www.cnblogs.com/jerehedu/ 
版权声明:本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

技术咨询:
 

Andorid之ActivityManager的更多相关文章

  1. Andorid实现点击获取验证码倒计时效果

    这篇文章主要介绍了Andorid实现点击获取验证码倒计时效果,这种效果大家经常遇到,想知道如何实现的,请阅读本文   我们在开发中经常用到倒计时的功能,比如发送验证码后,倒计时60s再进行验证码的获取 ...

  2. 第一章 Andorid系统移植与驱动开发概述 - 读书笔记

    Android驱动月考1 第一章 Andorid系统移植与驱动开发概述 - 读书笔记 1.Android系统的架构: (1)Linux内核,Android是基于Linux内核的操作系统,并且开源,所以 ...

  3. Cordova webapp实战开发:(5)如何写一个Andorid下自动更新的插件?

    在 <Cordova webapp实战开发:(4)Android环境搭建>中我们搭建好了开发环境,也给大家布置了调用插件的预习作业,做得如何了呢?今天我们来学一下如何自己从头建立一个And ...

  4. 使用ActivityManager实现进程管理

    Android中使用ActivityManager可以获得进程信息,并对进程进行管理,如结束进程等.本文使用ActivityManager获得进程列表,并结束选中的进程. 首先,看看布局文件. < ...

  5. 第三次个人作业——关于K米(Andorid)的案例分析

    第三次个人作业--关于K米(Andorid)的案例分析 1.K米简介 官方网址:http://www.ktvme.com/ 2.评测 2.1.上手体验 带着找bug的心态,兴致勃勃地开始体验 K米.打 ...

  6. android:id="@id/resid" , andorid:id="@+id/resid" 的区别

    的区别?android:id="@id/resid"    // 引用现有的资源idandorid:id="@+id/resid"  // 新增一个资源id i ...

  7. Andorid手机振动器(Vibrator)的使用

    标签: android vibrator 震动器 it 分类: Andorid 获取振动器Vibrator实例: Vibrator  mVibrator = (Vibrator) context.ge ...

  8. Android开发之ActivityManager获取系统信息

    1.判断指定的service是否在运行 public static boolean isServiceRunning(Context ctx, String serviceName) { Activi ...

  9. ActivityManager: Warning: Activity not started, its current task has been brought to the front 的的问题

    运行android程序的时候提示:ActivityManager: Warning: Activity not started, its current task has been brought t ...

随机推荐

  1. android httpUrlConnection HttpClient

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha httpUrlConnection    超文本传输协议统一资源定位器连接 http 超 ...

  2. [BZOJ4700]适者(CDQ分治+DP/李超线段树)

    如果没有秒杀,就是经典的国王游戏问题,按t/a从小到大排序即可. 考虑删除两个数i<j能给答案减少的贡献:S[i]*T[i]+P[i-1]*A[i]-A[i]+S[j]*T[j]+P[j-1]* ...

  3. bzoj 4242 水壶 (多源最短路+最小生成树+启发式合并)

    4242: 水壶 Time Limit: 50 Sec  Memory Limit: 512 MBSubmit: 1028  Solved: 261[Submit][Status][Discuss] ...

  4. 【贪心】【堆】Gym - 101775B - Scapegoat

    题意:有n个事件,每个事件有一个严重程度,m个人(m>=n),你要让m个人去背锅,每个人只能背一个事件的锅,但是一个事件可以由很多人背.让你使得这m个人所承受的严重程度的方差最小化. 考虑一开始 ...

  5. 【洛谷】4317:花神的数论题【数位DP】

    P4317 花神的数论题 题目背景 众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦. 题目描述 话说花神这天又来讲课了.课后照例有超级难的神题啦…… 我 ...

  6. FindWindow和FindWindowEx

    函数原型:FindWindow(lpszClassName,lpszWindowName) 参数:lpszClassName--窗口类名;lpszWindowName--窗口标题 功能:查找窗口,未找 ...

  7. 【Deep Learning】一、AutoEncoder

    Deep Learning 第一战: 完成:UFLDL教程 稀疏自编码器-Exercise:Sparse Autoencoder Code: 学习到的稀疏参数W1: 参考资料: UFLDL教程 稀疏自 ...

  8. Android File Hierarchy : System Structure Architecture Layout

    Most of the Android user are using their Android phone just for calls, SMS, browsing and basic apps, ...

  9. How to match between physical usb device and its drive letter?

    struct tagDrives { WCHAR letter; WCHAR volume[ BUFFER_SIZE ]; } g_drives[ ]; // WCHAR GetUSBDrive( ) ...

  10. C#程序集系列04,在程序集包含多个module的场景下理解关键字internal

    本篇在一个程序集包含多个module的场景下体验internal的含义. →查看F盘as文件夹下的文件→删除MainClass.exe→把MyFirstModule和MySecondModule组装到 ...