1 一个任务:从使用者的观点,他是一个应用程序;对开发者来讲,它是贯穿活动着的任务的一个或者多个视图,或者一个活动栈

2 一个 进程 :一个进程是一个运行着应用程序代码的底层核心过程。通常.apk包里所有代码运行在一个进程里,一个进程对于一个.apk包。

3 一个线程:每个进程包含一个或多个线程。多数情况下,Android 避免在进程里创建多余的线程,除非它创建它自己的线程,我们应保持应用程序的单线程性。



进程的重要性,优先级


1前台进程

用户当前正在做的事情需要这个进程。如果满足下面的条件,一个进程就被认为是前台进程:

这个进程拥有一个正在与用户交互的Activity(这个ActivityonResume()方法被调用)

这个进程拥有一个绑定到正在与用户交互的activity上的Service

这个进程拥有一个前台运行的Service — service调用了方法startForeground().

这个进程拥有一个正在执行其任何一个生命周期回调方法(onCreate(),onStart(),onDestroy())的Service

这个进程拥有正在执行其onReceive()方法的BroadcastReceiver


通常,在任何时间点,只有很少的前台进程存在。它们只有在达到无法调合的矛盾时才会被杀--如果内存太小而不能继续运行时。通常,到了这时,设备就达到了一个内存分页调度状态,所以需要杀一些前台进程来保证用户界面的反应。


2可见进程

一个进程不拥有运行于前台的组件,但是依然能影响用户所见。满足下列条件时,进程即为可见:

这个进程拥有一个不在前台但仍可见的Activity(它的onPause()方法被调用)。当一个前台activity启动一个对话框时,就出了这种情况。


3服务进程

一个可见进程被认为是极其重要的。并且,除非只有杀掉它才可以保证所有前台进程的运行,否则是不能动它的。

这个进程拥有一个绑定到可见activityService

一个进程不在上述两种之内,但它运行着一个被startService()所启动的service

尽管一个服务进程不直接影响用户所见,但是它们通常做一些用户关心的事情(比如播放音乐或下载数据),所以系统不到前台进程和可见进程活不下去时不会杀它。


4后台进程

一个进程拥有一个当前不可见的activity(activityonStop()方法被调用)

这样的进程们不会直接影响到用户体验,所以系统可以在任意时刻杀了它们从而为前台、可见、以及服务进程们提供存储空间。通常有很多后台进程在运行。它们被保存在一个LRU(最近最少使用)列表中来确保拥有最近刚被看到的activity的进程最后被杀。如果一个activity正确的实现了它的生命周期方法,并保存了它的当前状态,那么杀死它的进程将不会对用户的可视化体验造成影响。因为当用户返回到这个activity时,这个activity会恢复它所有的可见状态。


5空进程

一个进程不拥有入何active组件。

保留这类进程的唯一理由是高速缓存,这样可以提高下一次一个组件要运行它时的启动速度。系统经常为了平衡在进程高速缓存和底层的内核高速缓存之间的整体系统资源而杀死它们。


很多资料上都是这5大优先级,

可是我最近在查看文档的时候发现ActivityManager.RunningAppProcessInfo下的importance有6个值,分别是
IMPORTANCE_BACKGROUND
IMPORTANCE_EMPTY
IMPORTANCE_FOREGROUND
IMPORTANCE_PERCEPTIBLE
IMPORTANCE_SERVICE
IMPORTANCE_VISIBLE


多了一个(IMPORTANCE_PERCEPTIBLE),不是很明白,有明白的童鞋写下评论哈,我在问答社区德问也提问了,如果有回答的,可以去看看~~



最近在研究下面三个类


ActivityManager.RunningTaskInfo


官方文档这样解释:Information you can retrieve about a particular task that is currently "running" in the system. Note that a running task does not mean the given task actually has a process it is actively running in; it simply means that the user has gone to it and never closed it, but currently the system may have killed its process and is only holding on to its last state in order to restart it when the user returns.

也就是说, ActivityManager.RunningTaskInfo获取的是正“运行在”系统中的任务,需要注意的是,这里的“正在运行的任务”并不意味着给定的任务确实有一个活动的进程正在运行,而是用于曾经打开过,并且一直没有关闭的任务。但是,最近系统可能会杀死某些进程,直到用户回来,任务会一直保持最后一次打开时的状态。

ActivityManager.RunningAppProcessInfo

Information you can retrieve about a running process.
你可以获取的关于运行中的进程的信息。

ActivityManager.RunningServiceInfo

Information you can retrieve about a particular Service that is currently running in the system.
你可以获取关于特定的正在系统中执行的服务的信息。

参考资料:

官方文档
http://www.cnblogs.com/yangxiao24/archive/2011/07/03/2096662.html

http://chaoqunz.blog.163.com/blog/static/6154877720090495819383/

更多相关文章

  1. Android活跃用户总数达14亿人 平均每4个月增加1亿用户
  2. Android 杀掉自己进程的方法
  3. Android 获得当前进程PackageName
  4. Android 图形用户界面 之 绘图(一)
  5. 穿针引线,帮你回忆, 汇总:Android系统启动流程 & 应用程序'进程'启
  6. android 查看其他进程内存数据
  7. Android 消息机制 进程调度问题

随机推荐

  1. 【Android】获取手机通讯录中的联系人信
  2. Android 应用开发的耗电量控制
  3. android animator
  4. Android 高手进阶,自定义圆形进度条
  5. Android的几种布局方式
  6. Android(安卓)WebView开发常见问题
  7. 发布翻译的android英文教材《the busy co
  8. Android(安卓)Bitmap相关
  9. PPS 推出 Android 版,用手機、平板電腦看
  10. Android仿淘宝首页UI(附代源代码及示例图