android 正在运行的activity和services

你是不是很想知道当前状态下,系统在后台正运行着的activity呢?这里,让我们一起来实现吧。

[java]  view plain copy
  1. /** 
  2.      * 获取系统中正在运行的任务信息(强调下,任务是多个activity的集合) 
  3.      */  
  4.     public void run(){  
  5.         String info =  "" ;  
  6.         // 获取的正在运行的activity的最大数量(防止太多,系统承受不了啊)、  
  7.         int maxNum = 40;  
  8.         // ActivityManager的功能是为系统中所有运行着的Activity交互提供了接口,主要的接口围绕着运行中的进程信息,任务信息,服务信息等  
  9.         ActivityManager activityManager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);  
  10.         /** 
  11.          * 获取正在运行的任务这里一定要注意,这里我们获取的时候, 
  12.          * 你的任务或者其中的activity可能没结束,但是当你在后边使用的时候,很有可能已经被kill了哦。 
  13.          * 意思很简单,系统返给你的正在运行的task,是暂态的,仅仅代表你调用该方法时系统中的状态, 
  14.          * 至于后边是否发生了该变,系统概不负责、 
  15.          */  
  16.         List<ActivityManager.RunningTaskInfo> runningTasks = activityManager.getRunningTasks(maxNum);  
  17.         for(ActivityManager.RunningTaskInfo taskInfo:runningTasks){  
  18.             info+="一个任务信息开始:/n";  
  19.             info+="当前任务中正处于运行状态的activity数目:"+taskInfo.numRunning;  
  20.             info+="当前任务中的activity数目: "+taskInfo.numActivities;  
  21.             info+="启动当前任务的activity名称:"+taskInfo.baseActivity.getClassName();  
  22.               
  23.         }  

获取当前正在运行的activity信息

 ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
        RunningTaskInfo info = manager.getRunningTasks(1).get(0); 
    String shortClassName = info.topActivity.getShortClassName();    //类名 
        String className = info.topActivity.getClassName();              //完整类名 
        String packageName = info.topActivity.getPackageName();          //包名 
        

/**
* 检测某ActivityUpdate是否在当前Task的栈顶
*/
public boolean isTopActivy(String cmdName){
        ActivityManager manager = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE);
        List<RunningTaskInfo> runningTaskInfos = manager.getRunningTasks(1);
        String cmpNameTemp = null;

        if(null != runningTaskInfos){
                cmpNameTemp=(runningTaskInfos.get(0).topActivity).toString);
                Log.e("cmpname","cmpname:"+cmpName);
        }

       if(null == cmpNameTemp)return false;
       return cmpNameTemp.equals(cmdName);
}

最后在应用中添加所需的权限:
<uses-permission android:name="android.permission.GET_TASKS"/>

注意:这里要给android.permission.GET_TASKS权限哦。

上面的代码,我们只能获取到运行中的task(任务),那么如何获得后台运行的service信息呢?

请看代码:

[java]  view plain copy
  1. /*** 
  2.      * 获取运行在后台中的service 
  3.      */  
  4.         private void run2(){  
  5.             String info = "";  
  6.             int maxNum = 30;  
  7.             ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);  
  8.             // 注意这里获取的方法和返回值的类型都变化了啊  
  9.             List<ActivityManager.RunningServiceInfo> serivces = activityManager.getRunningServices(maxNum);  
  10.             for(RunningServiceInfo service:serivces){  
  11.                 info = "一个service信息开始:/n";  
  12.                 info+="当前service的启动时间:"+service.activeSince;  
  13.                 info+="链接到当前service客户端的数量:"+service.clientCount;  
  14.             }  
  15.               
  16.         }  

 

---------------------------------------------------------------------------------------

下面,我们展示下,对于RunningTaskInfo和RunningServiceInfo两个类,我们可以获取的信息

android 正在运行的activity和services_第1张图片

android 正在运行的activity和services_第2张图片

你可能感兴趣的:(android 正在运行的activity和services)