zoukankan      html  css  js  c++  java
  • 获取android 进程

    引用: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 plaincopy
     
    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 plaincopy
     
    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. }  
  • 相关阅读:
    吐槽下博客园
    关于爱情
    CCD 驱动 时序理解
    写在博客的第一天
    51单片机最小系统
    swing之登陆功能
    TDSQL | 在整个技术解决方案中HTAP对应的混合交易以及分析系统应该如何实现?
    TDSQL | 深度解读HTAP系统的问题与主义之争
    硬核干货!TDSQL全局一致性读技术详解|
    35w奖金池,腾讯云TDSQL精英挑战赛等你来战!
  • 原文地址:https://www.cnblogs.com/sode/p/3001714.html
Copyright © 2011-2022 走看看