Android中ActivityManager(AM)的方法解释和几个使用场景介绍

来源:互联网 发布:源站ip地址和域名 编辑:程序博客网 时间:2024/05/16 19:17
1、ActivityManager是众多系统服务中的一种.在程序中获取am实例的方法:
ActivityManager am = context.getSystemService(ACTIVITY_SERVICE);  需要强制转换类型
2、ActivityManager中的几个方法的含义:
1)getRunningAppProcess();该方法返回的是一个RunningAppProcessInfo对象的集合,表示获取当前系统内所有正在运行的进程的相关信息的集合.在此需要特别说明的是,进程是个很大的概念。一个进程中可以包含多个应用程序,在理论上,如果内存足够大,所有应用程序都可以运行行同一个进程内(只是理论而已)。所以如果打印Log的话,可以看到processName类似于应用程序的包名,要避免该容易混淆的误区。
在RunningAppProcessInfo封装对象中,有processName(进程名称),pid(进程id),String [] pkgList(进程内包含的应用程序的字符串数组),importance(进程的优先级)
2)getRunningTasks(int max);该方法返回的是一个RunningTaskInfo对象的集合,表示获取正在运行的任务。其中RunningTaskInfo经常被用到的一个属性就是topActivity,其封装类型是ComponentName对象,通过该对象可以拿到栈顶topActivity的包名(getPackageName())从而拿到运行该任务的应用包名.
调用该API方法时需要在配置文件中声明可以获取任务列表的权限:<uses-permission android:name="android.permission.GET_TASKS" />
3)通过ActivityManager还可以获取当前系统运行的内存的使用相关的情况.具体的使用参照如下所示:
ActivityManager.MemeoryInfo  mi = new ActivityManager.MemoryInfo();
am.getMemoryInfo(mi);
//获取系统剩余的内存空间: long availNum = mi.availMem;
//获取系统所有的内存空间: long totalNum = mi.totalMem;
4)getRunningService(int maxNum)该方法返回的是目前设备上正在运行的服务,参数表示返回的服务的一个最大数,返回值为RunningServiceInfo对象的集合.

几个可能用到的场景:
1)曾经做过个小Demo,其中有个需求就是,列出应用中所有安装的应用程序,用户可以点击任一一个应用程序进行锁定,设置其加锁。也就是说的程序锁的概念。
在这个需求当中,首要要考虑的就是用户打开应用程序是不确定的,时间也是不确定的。所以,如果要给特定的应用程序加锁,只能是在后台开启一个服务,该服务要完成的任务就是不断的扫描用户的操作,获取当前的运行的最新的任务,如果一旦发现设置的特定的应用程序被运行了,就强制将用户操作进行拦截,弹出输入密码的界面,判断密码对错。密码正确开启程序。服务在后台不断扫描的时候就要用到ActivityManager的getRunningTask(),通过ComponmentName获取包名(getPackage())进行比较.

2)该例子和第一个差不多,但是有点变态。如果有人想使坏,在设备上不让某个特定的应用程序启动。可以用到上面提到的方法。检测用户动作,如果是特定的应用包名,强制应用跳转至桌面,也就达到了不让应用启动的目的。

熟悉Android都应该知道,ActivityManager和PackageManager经常一起出现,也最容易联系起来。
下次继续说一下PackageManager的常用方法和例子.

0 0
原创粉丝点击