RunningTaskInfo
AndroidManifest.xml
必须在AndroidManifest.xml添加Android.permission.GET_TASKS的权限,才能访问系统正在运行中的Activity。
- <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)。
- /* ActivityManager对象向系统取得ACTIVITY_SERVICE */
- mActivityManager =
- (ActivityManager)EX05_21.this.getSystemService(ACTIVITY_SERVICE);
- arylistTask = new ArrayList<String>();
- /* 以getRunningTasks方法取回正在运行中的程序TaskInfo */
- List<ActivityManager.RunningServiceInfo> mRunningTasks =
- mActivityManager.getRunningServices(intGetTastCounter);
- int i = 1;
- /* 以循环及baseActivity方式取得任务名称与ID */
- for (ActivityManager.RunningServiceInfo amTask : mRunningTasks)
- {
- /* baseActivity.getClassName取出运行任务名称 */
- arylistTask.add("" + (i++) + ": "+
- amTask.process + "(ID=" + amTask.pid +")");
- }
- aryAdapter1 = new ArrayAdapter<String>
- (EX05_21.this, R.layout.simple_list_item_1, arylistTask);
- if(aryAdapter1.getCount()==0)
- {
- /* 当没有任何运行的任务,则提示信息 */
- mMakeTextToast
- (
- getResources().getText
- (R.string.str_err_no_running_service).toString(),
- true
- );
- }
- else
- {
- /* 发现后台运行的任务程序,以ListView Widget条列呈现 */
- 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,则表示服务已经在启用运行中 |