在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. 1017 Queueing at Bank (25)(25 point(s))

    problem Suppose a bank has K windows open for service. There is a yellow line in front of the window ...

  2. 转Google Protocol Buffer 的使用和原理

    Google Protocol Buffer 的使用和原理 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式.它 ...

  3. Form与ModelForm-下拉框或者多选注意//及字段补充

    一.Form 设计一张普通model表: class UserInfo(models.Model): name = models.CharField(verbose_name='员工姓名', max_ ...

  4. 分分钟搞定Python之排序与列表

    排序时程序中用得比较多的方法了.在Python中,最简单的排序方法摸过与使用内置的sorted(list)这个函数了,该函数一一个列表作为参数返回一个新的列表,只不过是把旧列表中的元素排过序了.原列表 ...

  5. JVM内存模型以及垃圾回收

    JAVA堆的描述如下: 内存由Perm和Heap组成.其中Heap = {Old + NEW = { Eden , from, to } } JVM内存模型中分两大块: NEW Generation: ...

  6. 让screen帮助你协同工作

    Screen是系统管理员手中的一件利器,下面我把它介绍给你,相信你会和我一样,认可这个非常棒的软件 一,什么情况下会用到screen?   比如说,我们在运行一个非常费时间的程序,注意:可能我们是在通 ...

  7. 【POJ】1835:宇航员【模拟】【三维行走】

    宇航员 Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 7228   Accepted: 3050 Description 问 ...

  8. 模板 SBT

    傻逼树模板 struct SBT{ const static int maxn = 1e5 + 15; int lft[maxn] , rht[maxn] , key[maxn] , s[maxn] ...

  9. 工作记录(1)- js问题

    也是好久不写博客了,确实懒了:想想应该把node.js的东西写完整比较好,在抽时间吧: 这几天在做阿里巴巴的一个页面展示,里面设计到了一些js的问题,中途也遇到了一些幼稚的问题, 算是简单记录一下,以 ...

  10. Oracle问题诊断过程常用SQL

    --查看临时表空间使用情况select tablespace_name ,sum(size_mb),sum(used_mb),round(sum(used_mb)/sum(size_mb),2) fr ...