引用:

在Android中获取系统正在运行的进程方法是getRunningAppProcesses()。

我们首先通过ActivityManager _ActivityManager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);来获取系统的全局状态。

然后通过调用getRunningAppProcesses()方法就可以获得系统正在运行的进程。

 

ActivityManager _ActivityManager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
        List<RunningAppProcessInfo> list = _ActivityManager .getRunningAppProcesses();
        int i = list.size();
        Log.i("tag", String.valueOf(i));
        for (int j = 0; j < list.size(); j++) {
            Log.i("tag", list.get(j).processName);
        }

==========================================================

引用:

Android中关于任务和进程的概念有点混淆,网上看到一篇说得很好的文章,摘过来记录一下~~~

http://bbs.sjtu.edu.cn/bbstcon,board,MobilePhone,reid,1288709685,file,M.1288709685.A.html

 

我的个人理解:

首先你看到的不是进程(process),是任务(Task)。

用终端,输ps,可以看到真正的运行中的linux process,我的milestone上一般会有90

多个。

Android里,app和process和task是三个完全不同的概念……

process是一个继承自Linux的概念,一般一个app会有一个uid,需要时会独立地开一个p

rocess。有些process是作为app的容器的,其它process是底层linux用到的。同时,虽

然很少见,也会有多个app共享一个process或者uid。

task是一个activity的栈,其中"可能"含有来自多个App的activity,也就是来自多个p

rocess,杀task一般是关闭Task的根activity引出的子树,不一定会连带kill掉对应的

process。


所以这三个东西是会混在一起的,没有windows或者其它os中那么清晰的进程边界。


API中,关于获得运行中的那些东西,有一个类ActivityManager,它可以:
getRecentTasks() 最近开的task,HOME键长按会看到这个

getRunningAppProcesses() 运行中的作为app容器的process。

getRunningServices() 运行中的后台服务

getRunningTasks() 运行中的任务



所以即使在API中,这些东西也不统一。

如果一个activity A不是作为task的root activity而是被别的task调用,那么A对应的p

rocess是开着的,这时是否显示它呢?

另外,如果一个app只有service开着而没有Activity或者task,算不算开着呢?


加上不同的killer可能会有不同的对系统关键进程或者关键服务的过滤方式,这可能也

会增加一定程度的混乱。


说到底,android里原本就没有别的os中那么清晰的任务概念,这些概念都是那些程序自

己定义出来的,所以比较混乱……

 

获取最近运行的程序列表:

 


[java]  
    view plain 
    copy 
    

        
    
 
  
1. public void
2.     ImageButton ivIcon;  
3.     ActivityManager am = (ActivityManager)getSystemService(ACTIVITY_SERVICE);  
4. this.getPackageManager();  
5. try
6. 64, 0);  
7.         llTaskBar.removeAllViews();  
8. for
9.             Intent intent = ti.baseIntent;  
10. 0);  
11. if (resolveInfo != null) {  
12. new ImageButton(this);  
13.                 ivIcon.setImageDrawable(resolveInfo.loadIcon(pm));  
14. true);  
15. true);  
16. true);  
17.                       
18.                 ivIcon.setScaleType(ScaleType.CENTER);  
19.                       
20. new LinearLayout.LayoutParams(120, 120));  
21.                 llTaskBar.addView(ivIcon);  
22.             }  
23.         }  
24. catch
25.         se.printStackTrace();  
26.     }  
27. }  
 
 
 
 
获取正在运行的进程列表:
 
 
 
 
    [java]  
    view plain 
    copy 
    

        
    
 
  
1. public void
2.     ImageButton ivIcon;  
3.     ActivityManager am = (ActivityManager)getSystemService(ACTIVITY_SERVICE);  
4.     List<ActivityManager.RunningAppProcessInfo> list = am.getRunningAppProcesses();  
5. this.getApplicationContext().getPackageManager();  
6.     llTaskBar.removeAllViews();  
7. for
8. if (pm.getLaunchIntentForPackage(pi.processName) != null) {  
9. try
10.                 ApplicationInfo ai = pm.getApplicationInfo(pi.processName,   
11.                         PackageManager.GET_META_DATA);  
12. if (ai != null) {  
13. new ImageButton(this);  
14.                     ivIcon.setImageDrawable(ai.loadIcon(pm));  
15. true);  
16. true);  
17. true);  
18.                       
19.                     ivIcon.setScaleType(ScaleType.CENTER);  
20.                       
21. new LinearLayout.LayoutParams(120, 120));  
22.                     llTaskBar.addView(ivIcon);  
23.                 }  
24. catch
25.                 e.printStackTrace();  
26.             }  
27.         }  
28.     }  
29. }