android进程的生命周期

 

作者:朱博

        android系统会尝试去维护一个应用进程达到其尽可能长的生命周期,但是在系统内存过低时它会移除一些老的进程。android系统会根据进程所含有的组件以它们的状态,把这些进程划分“重要性等级”,并根据等级决定哪些进程应该被保留哪些应该被杀死。低重要性的进程会被优先淘汰,之后按等级依次进行处理。重要性划分为5个级别:

1. 前景进程:正在与用户交互的进程。

    如果一个进程包含以下条件可以认为是一个前景进程:

  •      它正在运行一个与用户进行交互的Activity(Activity对象的onResume()方法被调用)。
  •      它含有一个service绑定在与用户进行交互的activity上。
  •      它含有一个正在执行其生命周期方法的service(onCreate(), onStart(), 或者OnDestroy)
  •      它含有一个正在执行其onReceiver()方法的BroadcastReceiver对象。

2.  可视进程:没有任何前景组件,但是仍然可以影响屏幕上内容的进程。

       如果一个进程包含以下条件可以被认为是一个可视进程:

  •      它含有一个不在前景但仍然可视的Activity(Activity对象的OnPause()方法被调用),比如一个对话遮盖在当前的activity上。
  •      它含有一个service绑定在可视的activity上。

3.  服务进程:含有一个正在运行的service。

     尽管它没有直接与用户进行交互,但是它处理的是用户所关心的事情(例如在后台播放Mp3或者下载数据),所以

     在前景和可视进程内存充足的情况下,系统会保持它运行。

4.  后台进程:含有当前不再可视的Activity(Activity对象的onStop()方法被调用)。

      这些进程无法对用户体验造成直接的影响,所以当前景进程,可视进程或服务进程需要内存时它们可能会被杀死。所以它们维护了一个(最近使用)列表来保证最近被用户使用的进程最后被杀死

5.  空进程:不含有任何活动状态组件的进程。

      这个级别进程存在的意义是充当缓冲,以减少下次启动或返回时所需的时间。系统经常会杀死这些进程以维护整个系统资源的平衡。

      android根据进程所含活动状态组件的重要性,尽可能的提高其级别。

      另外,一个进程的级别会受到其它依赖于它的进程的影响而提高,一个进程为其它进程提供服务,那么它的级别不会低于被服务的的进程。

例如,如果一个在进程A的content provider为一个在进程B的客户端提供服务,或者一个在进程A的service绑定在一个在进程B的组件上,那么进程A的重要性至少与进程B相同。

       因为服务进程的级别要高于后台进程,所以在处理一个耗时操作时开启一个服务要比使用子线程更好,尤其是当这个操作在Activity的生命周期之外。这也是broadcast receiver 在处理耗时操作时使用service而不用子线程的原因。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值