在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. golang make()的第三个参数

    golang分配内存有一个make函数,该函数第一个参数是类型,第二个参数是分配的空间,第三个参数是预留分配空间,前两个参数都很好理解, 对于第三个参数,例如a:=make([]int, 5, 10) ...

  2. 特征向量、特征值以及降维方法(PCA、SVD、LDA)

    一.特征向量/特征值 Av = λv 如果把矩阵看作是一个运动,运动的方向叫做特征向量,运动的速度叫做特征值.对于上式,v为A矩阵的特征向量,λ为A矩阵的特征值. 假设:v不是A的速度(方向) 结果如 ...

  3. android 消息机制,handler机制,messageQueue,looper

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha handler  就是 处理器 .  用来处理消息, 发送消息. handler   就 ...

  4. 直接插入排序(高级版)之C++实现

    直接插入排序(高级版)之C++实现 一.源代码:InsertSortHigh.cpp /*直接插入排序思想: 假设待排序的记录存放在数组R[1..n]中.初始时,R[1]自成1个有序区,无序区为R[2 ...

  5. BZOJ 3483 SGU505 Prefixes and suffixes(字典树+可持久化线段树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3483 [题目大意] 给出一些串,同时给出m对前缀后缀,询问有多少串满足给出的前缀后缀模 ...

  6. 转 MySQL连接超时

    在负载较重的MySQL服务器上,有时你偶尔会看到一些连接超时的错误,诸如: Can’t connect to MySQL server on ‘mydb’(110).如果当时你有多个连接请求,你会发现 ...

  7. Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) A. Bear and Game 水题

    A. Bear and Game 题目连接: http://www.codeforces.com/contest/673/problem/A Description Bear Limak likes ...

  8. An ac a day,keep wa away

    zoj 初学者题: 1001 1037 1048 1049 1051 1067 1115 1151 1201 1205 1216 1240 1241 1242 1251 1292 1331 1334 ...

  9. codevs 1052 地鼠游戏 优先队列

    1052 地鼠游戏 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://www.codevs.cn/problem/1052/ Descriptio ...

  10. 读书笔记_Effective_C++_条款三十七:绝不重新定义继承而来的缺省参数值

    先看下面的例子: enum MyColor { RED, GREEN, BLUE, }; class Shape { public: ; }; class Rectangle: public Shap ...