获取android 进程

简介: 引用:http://blog.csdn.net/svrsimon/article/details/6904671 在Android中获取系统正在运行的进程方法是getRunningAppProcesses()。

引用:http://blog.csdn.net/svrsimon/article/details/6904671

在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);
        }

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

引用:http://blog.csdn.net/yao_guet/article/details/6267943

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 getTaskList() {  
  2.     ImageButton ivIcon;  
  3.     ActivityManager am = (ActivityManager)getSystemService(ACTIVITY_SERVICE);  
  4.     PackageManager pm = this.getPackageManager();  
  5.     try {  
  6.         List<RecentTaskInfo> list = am.getRecentTasks(640);  
  7.         llTaskBar.removeAllViews();  
  8.         for (RecentTaskInfo ti : list) {  
  9.             Intent intent = ti.baseIntent;  
  10.             ResolveInfo resolveInfo = pm.resolveActivity(intent, 0);  
  11.             if (resolveInfo != null) {  
  12.                 ivIcon = new ImageButton(this);  
  13.                 ivIcon.setImageDrawable(resolveInfo.loadIcon(pm));  
  14.                 ivIcon.setFocusable(true);  
  15.                 ivIcon.setClickable(true);  
  16.                 ivIcon.setEnabled(true);  
  17.                       
  18.                 ivIcon.setScaleType(ScaleType.CENTER);  
  19.                       
  20.                 ivIcon.setLayoutParams(new LinearLayout.LayoutParams(120120));  
  21.                 llTaskBar.addView(ivIcon);  
  22.             }  
  23.         }  
  24.     } catch (SecurityException se) {  
  25.         se.printStackTrace();  
  26.     }  
  27. }  

 

 

获取正在运行的进程列表:

 

[java]  view plain copy
 
  1. public void getRunningProcessList() {  
  2.     ImageButton ivIcon;  
  3.     ActivityManager am = (ActivityManager)getSystemService(ACTIVITY_SERVICE);  
  4.     List<ActivityManager.RunningAppProcessInfo> list = am.getRunningAppProcesses();  
  5.     PackageManager pm = this.getApplicationContext().getPackageManager();  
  6.     llTaskBar.removeAllViews();  
  7.     for (ActivityManager.RunningAppProcessInfo pi : list) {  
  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.                     ivIcon = new ImageButton(this);  
  14.                     ivIcon.setImageDrawable(ai.loadIcon(pm));  
  15.                     ivIcon.setFocusable(true);  
  16.                     ivIcon.setClickable(true);  
  17.                     ivIcon.setEnabled(true);  
  18.                       
  19.                     ivIcon.setScaleType(ScaleType.CENTER);  
  20.                       
  21.                     ivIcon.setLayoutParams(new LinearLayout.LayoutParams(120120));  
  22.                     llTaskBar.addView(ivIcon);  
  23.                 }  
  24.             } catch (NameNotFoundException e) {  
  25.                 e.printStackTrace();  
  26.             }  
  27.         }  
  28.     }  
  29. }  

 

 

相关文章
|
3月前
|
Java Android开发 数据安全/隐私保护
Android中多进程通信有几种方式?需要注意哪些问题?
本文介绍了Android中的多进程通信(IPC),探讨了IPC的重要性及其实现方式,如Intent、Binder、AIDL等,并通过一个使用Binder机制的示例详细说明了其实现过程。
406 4
|
4月前
|
API Android开发
Android P 性能优化:创建APP进程白名单,杀死白名单之外的进程
本文介绍了在Android P系统中通过创建应用进程白名单并杀死白名单之外的进程来优化性能的方法,包括设置权限、获取运行中的APP列表、配置白名单以及在应用启动时杀死非白名单进程的代码实现。
76 1
|
4月前
|
Android开发 开发者 Kotlin
Android 多进程情况下判断应用是否处于前台或者后台
本文介绍在多进程环境下判断Android应用前后台状态的方法。通过`ActivityManager`和服务信息`RunningAppProcessInfo`可有效检测应用状态,优化资源使用。提供Kotlin代码示例,帮助开发者轻松集成。
314 8
|
6月前
|
大数据 Linux Android开发
Android ParcelFileDescriptor实现进程间通信
Android ParcelFileDescriptor实现进程间通信
125 0
|
7月前
|
XML 前端开发 Android开发
Android架构设计——MVC(1),Android多进程从头讲到尾
Android架构设计——MVC(1),Android多进程从头讲到尾
|
Java Linux Android开发
理解Android进程创建流程
理解Android进程创建流程
129 0
|
7月前
|
安全 Linux API
Android进程与线程
Android进程与线程
57 0
|
监控 测试技术 Shell
性能测试 基于Python结合InfluxDB及Grafana图表实时监控Android系统和应用进程
性能测试 基于Python结合InfluxDB及Grafana图表实时监控Android系统和应用进程
327 0
性能测试 基于Python结合InfluxDB及Grafana图表实时监控Android系统和应用进程
|
Java Android开发
|
Unix Linux Android开发
Android C++系列:Linux进程间通信(二)
mmap可以把磁盘文件的一部分直接映射到内存,这样文件中的位置直接就有对应的内存 地址,对文件的读写可以直接用指针来做而不需要read/write函数。
112 0

相关实验场景

更多