现在的位置: 首页 > 综合 > 正文

进程(一) 1.5 进程的生命周期(Process lifecycle)

2013年08月02日 ⁄ 综合 ⁄ 共 1794字 ⁄ 字号 评论关闭

大家都知道,手机系统中,手机的内存是有限的,那就是说资源是有限的,那么这么多的程序在手机上运行,那不是会消耗很多的资源,最终消耗到没有。。。。这该怎么办,当然android系统当然不允许这样的事情发生,所以系统就需要把一些不重要的进程和线程强制的kill掉,为了能运行更多新的程序和更重要的进程。所以必须给我们的线程排个等级,这样系统就可以按照等级来决定哪个线程该kill掉。当然,一般的,进程优先级最低的线程先辈杀掉,接着杀比他低。。。以此类推。。。


进程5个等级


5个进程等级分别为:
Foreground Process ,Visible Process,Service Process,Background Process,Empty Process;

这几个进程等级不同,他们的安全优先级也对应不同,有高低之分。下面分别讲解。

1、Foreground Process (前台进程)
如下的情形就是前台进程:
a > 处于Activity Resume()状态(失去焦点,但是对于用户是能看到activity);
b > 处于与bound服务交互的状态;
c > 处于服务在前台的状态,(service调用startForeground(),强制提高service的优先级);
d > Service生命周期函数正在被执行(onCreate(),onStart(),onDestroy());
e > Broadcast Receiver正在执行onReceive()方法;

总结,

1> Activity正在交互,Service在前台执行,Broadcast Receiver正在接收,三者其中之一满足的这个进程,都是前台进程。

2> 一般只有几个前台进程在运行,因为资源有限。

3> 从安全优先级和用户体验的角度来说,所以在杀死Foreground Process需要用户响应(弹出个对话框,让用户自己决定是否需要结束这个进程),因为这个安全优先级是最高的。
再回想一下我们Activity的四种状态的第一种:Active/Runing  状态。在这个状态下,Android系统一般不会杀死这个Activity,除非发生异常(ANR application not response 或者是FC force close)。是不是也是最高的优先级呢?

2、Visible Process(可视进程)
如下的情形就是可视线程:

a> Activity不在前台显示,但也没有隐藏,能够看的见,activity处于pause状态,比如弹出一个对话框 (input Method);
b> 一个bound到visible或者foreground的activity的Service


注:可视进程优先级仅次于前台进程,所以一般很少被kill,除非需要更多的资源来运行前台运行。

3、Service Process(服务进程)

当以一个service通过startService启动,但是启动的,且不是上述的两种情况。虽然service没有直接绑定在用户可见的UI上,但是有些用户很关心,比较重要的事情(如从网路上下载文件,在后台播放音乐等情形),所以系统会保持运行除非比他高的等级进程运行;

4、Background Process(后台进程)

后台进程,说白了,其实就是针对activity的当activity除与不可见状态,就是onStop()被调用。由于这些都是用户看不到的,所以对于用户来说,这些进程被关闭,不影响用户体验,所以这些进程在任何时候都是可以被kill,为了比他高等级的三个进程提供资源。一般,android会在把activity保存在最近使用activity的列表(LRU,least
recently used
),最近使用的最后被删除。而且我们知道activity有保存当前activity的状态的功能,这个可以再activity的生命周期和状态保存中有解释。


5、Empty Process(空进程)

系统保留这类进程主要是为了缓存的需要,为了改进下次有android的组件在这个线程中启动时的速度和时间。系统往往kill这类进程为了保持整个系统中空进程缓存和内核缓存的平衡。
从以上分析来看,4个活动状态和5个进程等级具有密不可分的联系。还需融会贯通。


另外,还附加一点,当一个进程拥有前台和可视的进程,则他的优先级为前台进程,即他们中的优先级高的。

进程的优先级会因为其他程序的依赖而发生改变。

抱歉!评论已关闭.