在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. PHP中CGI,FastCGI,PHP-CGI与PHP-FPM对比

    CGI CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上. CGI可以用任何一 ...

  2. EXECL中怎么中把换行符换成任意字符

    作文本处理的时候,数据是从execl中拷贝出来的,但是execl中是带有格式的. 导出到txt文本中的时候会出现换行,不满足一行一条数据的要求. 公式 =SUBSTITUTE(A1,),"A ...

  3. python MySQL 获取全部数据库(DATABASE)名、表(TABLE)名

    import MySQLdb #connect try: conn = MySQLdb.connect( host = "localhost", user = "root ...

  4. C#高级编程9-第3章 对象与类型

    类与结构 类和结构都是对象的模板 类定义了处理和访问数据的方法,通过类的实例化进行逻辑处理 类与结构的区别是类是引用类型,存储在托管堆上:结构是值类型,存储在栈上的: 类使用class进行修饰,结构使 ...

  5. (转)js中的hasOwnProperty和isPrototypeOf方法

    hasOwnProperty:是用来判断一个对象是否有你给出名称的属性或对象.不过需要注意的是,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员.isPrototypeOf ...

  6. 小程序navigator点击有时候会闪一下

    <navigator hover-class="none">

  7. weblogic安装使用: Could not Create the Java Virtual Machine

    第一次使用weblogic,完全不明白是怎么一回事!找安装包花了大把时间!找到了不知道怎么安装 -- _ --||| 找了一篇安装文档<weblogic 安装部署手册.doc>, 位于:[ ...

  8. Hex-Rays Decompiler

    https://www.hex-rays.com/products/decompiler/ We are pleased to present our flagship product, the He ...

  9. redhat server 5.3内核升极2.6.18 升级到 3.5 装systemtap 原创

    1. 在 LINUX 3.5源代码目录下执行  yum install ncurses-devel     make menuconfig 2  打开内核跟踪事件,用于SYSTEMTAP跟踪 kern ...

  10. [INSTALL_FAILED_OLDER_SDK]错误

    在写完Demo后,执行时发现控制台打印出这么一段话:[INSTALL_FAILED_OLDER_SDK]错误. 原因是由于:測试机或者我们所用的虚拟机的android版本号太低. defaultCon ...