Android TASK 和 PROCESS的区别,获取最近运行的程序和正在运行的进程

前言
         欢迎大家我分享和推荐好用的代码段~~
声明
         欢迎转载,但请保留文章原始出处:
         CSDNhttp://www.csdn.net
         雨季o莫忧离:http://blog.csdn.net/luckkof

正文

 

首先你看到的不是进程(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中那么清晰的任务概念,这些概念都是那些程序自
己定义出来的,所以比较混乱……
获取最近运行的程序列表:

public void getTaskList() {
                ImageButton ivIcon;
                ActivityManager am = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
                PackageManager pm = this.getPackageManager();
                try {
                        List<RecentTaskInfo> list = am.getRecentTasks(64, 0);
                        llTaskBar.removeAllViews();
                        for (RecentTaskInfo ti : list) {
                                Intent intent = ti.baseIntent;
                                ResolveInfo resolveInfo = pm.resolveActivity(intent, 0);
                                if (resolveInfo != null) {
                                        ivIcon = new ImageButton(this);
                                        ivIcon.setImageDrawable(resolveInfo.loadIcon(pm));
                                        ivIcon.setFocusable(true);
                                        ivIcon.setClickable(true);
                                        ivIcon.setEnabled(true);
                                                
                                        ivIcon.setScaleType(ScaleType.CENTER);
                                                
                                        ivIcon.setLayoutParams(new LinearLayout.LayoutParams(120, 120));
                                        llTaskBar.addView(ivIcon);
                                }
                        }
                } catch (SecurityException se) {
                        se.printStackTrace();
                }
        }

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

public void getRunningProcessList() {
                ImageButton ivIcon;
                ActivityManager am = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
                List<ActivityManager.RunningAppProcessInfo> list = am.getRunningAppProcesses();
                PackageManager pm = this.getApplicationContext().getPackageManager();
                llTaskBar.removeAllViews();
                for (ActivityManager.RunningAppProcessInfo pi : list) {
                        if (pm.getLaunchIntentForPackage(pi.processName) != null) {
                                try {
                                        ApplicationInfo ai = pm.getApplicationInfo(pi.processName, 
                                                        PackageManager.GET_META_DATA);
                                        if (ai != null) {
                                                ivIcon = new ImageButton(this);
                                                ivIcon.setImageDrawable(ai.loadIcon(pm));
                                                ivIcon.setFocusable(true);
                                                ivIcon.setClickable(true);
                                                ivIcon.setEnabled(true);
                                                
                                                ivIcon.setScaleType(ScaleType.CENTER);
                                                
                                                ivIcon.setLayoutParams(new LinearLayout.LayoutParams(120, 120));
                                                llTaskBar.addView(ivIcon);
                                        }
                                } catch (NameNotFoundException e) {
                                        e.printStackTrace();
                                }
                        }
                }
        }


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值