任务管理器正在运行的程序(2)

RunningTaskInfo

AndroidManifest.xml

必须在AndroidManifest.xml添加Android.permission.GET_TASKS的权限,才能访问系统正在运行中的Activity。

 
  1. <uses-permission android:name="android.permission.GET_TASKS"> 

扩展学习

上面的程序可以取出后台正在运行中的Activity,但是却没有办法取得正在后台运行中的服务(Service),以下的扩展学习则是以取得系统服务(System Background Service)作为练习对象,并将取得的服务列表条列于程序的ListView当中,程序运行结果如图5-24所示。

 
图5-24  自己编写的Service-irdc.ex06_17,正在运行中

访问系统后台服务(Service)与Activity的写法不同,使用方法不同,其在于所需读取的不再是ActivityManager.RunningTaskInfo,而是ActivityManager.RunningServiceInfo,而在RunningTas-kInfo属性里,则需访问process以及pid来取得服务的名称及ID值,如以下程序,需在单击按钮的try{}语句中,替换原有的写法即可取出正在运行的系统服务(System Service)。

 
  1. /* ActivityManager对象向系统取得ACTIVITY_SERVICE */  
  2. mActivityManager =  
  3. (ActivityManager)EX05_21.this.getSystemService(ACTIVITY_SERVICE);  
  4.  
  5. arylistTask = new ArrayList<String>();  
  6.  
  7. /* 以getRunningTasks方法取回正在运行中的程序TaskInfo */  
  8. List<ActivityManager.RunningServiceInfo> mRunningTasks =  
  9. mActivityManager.getRunningServices(intGetTastCounter);  
  10.  
  11. int i = 1;  
  12. /* 以循环及baseActivity方式取得任务名称与ID */  
  13. for (ActivityManager.RunningServiceInfo amTask : mRunningTasks)  
  14. {  
  15.   /* baseActivity.getClassName取出运行任务名称 */  
  16.   arylistTask.add("" + (i++) + ": "+  
  17.   amTask.process + "(ID=" + amTask.pid +")");  
  18. }  
  19. aryAdapter1 = new ArrayAdapter<String> 
  20. (EX05_21.this, R.layout.simple_list_item_1, arylistTask);  
  21.  
  22. if(aryAdapter1.getCount()==0)  
  23. {  
  24.   /* 当没有任何运行的任务,则提示信息 */  
  25.   mMakeTextToast  
  26.   (  
  27.     getResources().getText  
  28.     (R.string.str_err_no_running_service).toString(),  
  29.     true  
  30.   );  
  31. }  
  32. else  
  33. {  
  34.   /* 发现后台运行的任务程序,以ListView Widget条列呈现 */  
  35.   mListView01.setAdapter(aryAdapter1);  

ActivityManager.RunningTaskInfo及ActivityManager.RunningServiceInfo可访问的属性如表5-8和表5-9所示。

表5-8 Android.app.ActivityManager.RunningTaskInfo

   

ComponentName

baseActivity

该任务作第一个运行中Activity组件名称

CharSequence

description

该任务现在的状况描述

Int

id

该任务的ID

Int

numActivities

该任务所运行的Activity数量,

包含已停止的

Int

numRunning

该任务正在运行Activity数量,

不包含已停止或不延续运行的

Bitmap

thumbnail

以缩图显示该任务目前的状态

ComponentName

topActivity

该任务自运行以来最优先运行的组件名称


表5-9 Android.app.ActivityManager.RunningServiceInfo

   

long

activeSince

该服务自启动至今的时间

int

clientCount

连接至此服务的client数量

int

crashCount

该服务在运行时共死机的次数

boolean

foreground

若为true,则该服务在后台运行

long

lastActivityTime

最后一个Activity与该服务绑定的时间

int

pid

若此值不为0,则表示正在运行服务的ID

String

Process

该服务的名称

long

restarting

若此值不为0,则表示该服务

不在运行中,但也许是在指定的时间才会运行

ComponentName

service

服务的组件名称

boolean

started

若此值为true,则表示服务已经在启用运行中


来自:http://book.51cto.com/art/201007/212203.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值