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中那么清晰的任务概念,这些概念都是那些程序自
己定义出来的,所以比较混乱……

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

view plaincopy to clipboardprint?
01.public void getTaskList() {
02. ImageButton ivIcon;
03. ActivityManager am = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
04. PackageManager pm = this.getPackageManager();
05. try {
06. List<RecentTaskInfo> list = am.getRecentTasks(64, 0);
07. llTaskBar.removeAllViews();
08. for (RecentTaskInfo ti : list) {
09. 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(120, 120));
21. llTaskBar.addView(ivIcon);
22. }
23. }
24. } catch (SecurityException se) {
25. se.printStackTrace();
26. }
27.}


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

view plaincopy to clipboardprint?
01.public void getRunningProcessList() {
02. ImageButton ivIcon;
03. ActivityManager am = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
04. List<ActivityManager.RunningAppProcessInfo> list = am.getRunningAppProcesses();
05. PackageManager pm = this.getApplicationContext().getPackageManager();
06. llTaskBar.removeAllViews();
07. for (ActivityManager.RunningAppProcessInfo pi : list) {
08. if (pm.getLaunchIntentForPackage(pi.processName) != null) {
09. 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(120, 120));
22. llTaskBar.addView(ivIcon);
23. }
24. } catch (NameNotFoundException e) {
25. e.printStackTrace();
26. }
27. }
28. }
29.}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Yao_GUET/archive/2011/03/22/6267943.aspx

更多相关文章

  1. Android(安卓)Zygote启动流程源码解析
  2. Small宝典(一)Android(安卓)Small框架源码解析
  3. Android(安卓)System.exit(code) and android.os.Process.killPr
  4. android 虚拟机介绍
  5. android 开发 屏幕适配 概念
  6. Android(安卓)内存onLowMemory& onTrimMemory优化
  7. 3.5 意图Intent的概念
  8. Android(安卓)多进程
  9. AIDL入门

随机推荐

  1. Android(安卓)monkey 使用及日志分析
  2. Android(安卓)沉浸式状态栏与隐藏导航栏
  3. arcgis for android 学习 - (2) hello Wr
  4. Android(安卓)轻松实现语音识别
  5. 2018-2019-2 20189203 移动平台应用开发
  6. android本地后台服务示例
  7. 修正Android摄像头API
  8. Android(安卓)Uri命名格式
  9. Android基础 : Android(安卓)Service
  10. android 牛人必修 ant 编译android工程