1、线程和进程的概念
进程:process,每个独立运行的程序。例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括CPU时间片、内存空间、磁盘空间、I/O设备等。然后,把该进程放人进程的就绪队列。进程调度程序选中它,为它分配CPU以及其它有关资源,该进程才真正运行。所以,进程是资源分配的基本单位。
线程:thread,程序的一条执行路径,进程的一个实体,是CPU调度和分配的基本单位。
2、进程的基本状态及转换
1)就绪状态(Ready):进程已经处于准备好运行的状态。进程已经获得除CPU以外所有必需的资源,只要获取CPU马上就开始运行。
2)执行状态(Running):进程已经获得CPU,正在执行。在单处理机(单核CPU)系统中,只有一个进程处于执行状态;多处理机系统中,可以有多个进程处于执行状态。
3)阻塞状态(Black):正在执行的进程由于发生某事件暂时无法执行的状态(如I/O请求、申请缓存区失败)。也称等待状态、封锁状态。
3、Android中进程详解
程序是指储存在外部存储的一个可执行文件,而进程是指处于执行期间的程序。当一个应用开始执行的时候,系统会为这个应用启动一个进程,这个进程只有一个线程。默认情况下,一个应用的所有组件都运行在一个进程和线程(主线程)中,并且大多数程序不必改变这一状况。如果非要改变,让同一个程序在不同的进程中运行的话,可以通过Manifest文件进行修改。manifest文件中的所有支持Android:process属性的那些项(<activity>,<service>, <receiver>,和<provider>)都可以指定一个进程,然后这些组件就会在这个进程中运行。Android可能在某些时刻决定关闭一个进程,比如内存很少了并且另一个进程更迫切的需要启动时。进程被关闭时,其中的组件们都被销毁。如果重新需要这些组件工作时,进程又会被创建出来。Android系统会尽量维持一个进程的生命,直到最终需要为新的更重要的进程腾出内存空间。决定哪个该杀哪个该留的时候,系统会根据运行于进程内的组件的和组件的状态把进程置于不同的重要性等级。当需要系统资源时,重要性等级越低的先被淘汰。
3、Android中进程的五个状态
1)前台进程:
a、正在与用户交互的Activity(调用了onResume()方法)。
b、这个进程拥有一个绑定到正在与用户交互的activity上的Service。
c、这个进程拥有一个前台运行的Service(service调用了方法 startForeground())。
d、这个进程拥有一个正在执行其任何一个生命周期回调方法(onCreate(),onStart(),或onDestroy())的Service。
e、这个进程拥有正在执行其onReceive()方法的BroadcastReceiver。
满足以上任意一点,就可认为该进程是前台进程。
2)可见进程
a、这个进程拥有一个不在前台但仍可见的Activity(它的onPause()方法被调用)
b、当一个前台activity启动一个对话框时,就出了这种情况。
3)服务进程
服务进程是通过 startService() 方法启动的进程,但不属于前台进程和可见进程。例如,在后台播放音乐或者在后台下载就是服务进程。
4)后台进程
这个进程拥有一个当前不可见的activity(activity的onStop()方法被调用)。例如我正在使用qq和别人聊天,这个时候qq是前台进程,但是当我点击Home键让qq界面消失的时候,这个时候它就转换成了后台进程。当内存不够的时候,可能会将后台进程回收。通常有很多后台进程在运行。它们被保存在一个LRU(最近最少使用)列表中来确保拥有最近刚被看到的activity的进程最后被杀。如果一个activity正确的实现了它的生命周期方法,并保存了它的当前状态,那么杀死它的进程将不会对用户的可视化体验造成影响。因为当用户返回到这个activity时,这个activity会恢复它所有的可见状态。
5)空进程
这个进程不拥有任何active组件。空进程指的是在这些进程内部,没有任何东西在运行。保留这种进程的的唯一目的是用作缓存,以缩短该应用下次在其中运行组件所需的启动时间。
4、线程和进程的区别
进程:每个进程都有独立的代码和数据空间,进程间的切换开销大。
线程:同一进程内的线程共享代码和数据空间,线程切换开销小。
5、Android中进程和线程的关系
1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少一个线程。
2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。
3)处理机分给线程,真正在处理机上运行的是线程。