Android应用的生命周期

Android应用的生命周期


在大多数情况下,每个Android应用都运行在各自的Linux进程中。该进程在此应用的代码需要
运行时被创建出来,并且保持运行直到系统需要回收内存给其它应用使用。

一个重要而且不同以往的特征是Android应用的进程的生死不是由应用自己控制的。系统通过综合
考虑正在运行的应用的组成,对用户的重要性,系统剩余内存等来决定进程的生死。

搞明白应用组件(特别是Activity, Service和IntentReceiver)对应用的进程的生死的影响很
重要。错误使用这些组件会导致应用的进程在做重要工作的时候被杀死。

一个常见的进程生命期Bug的例子是当IntentReceiver在onReceiveIntent()方法收到一个Intent
后启动一个线程,然后从方法中返回。一旦方法返回,系统考虑到IntentReceiver不再活动,那么
相应的进程就不是必须的了(除非其它应用组件激活它)。因此该进程可能在任何时间被杀死
以回收内存,从而导致开启的线程被终止。要解决这个问题就要在IntentReceiver中开启一个Service
,让系统知道该进程还有工作要处理。

Android按照进程中的正在运行的组件及其组件状态将进程放入重要性分层结构中,当内存不够时决定
哪些进程将被杀死。按重要性顺序:
1. 前台进程。持有屏幕最上面的用户正在交互的Activity的进程(它的onResume()方法被调用)或者正在
运行的IntentReceiver进程(它的onReceiveIntent()方法被执行)。这将会保持很少的进程在系统中,
并且这仅会杀死最后一次内存重整以来由于内存低而不能保持运行的进程。通常设备会在此点进入
内存页面交换状态,这个动作是保证用户交互的相应性而必须的。

2. 可见进程。持有在用户的屏幕上可见的Activity的进程,但不在最前面(它的onPause()方法被调用)。例如,
当前端activity显示一个对话框导致前一个activity被置于后面。除非为了保持前端的进程运行,
否则可见进程就是最重要的。

3. 服务进程。Service在startService()方法中启动的进程。虽然这些进程对用户不直接可见,但是
他们通常是用户关心的事情(如后台MP3播放或后台网络上传或下载),因此系统将保持这些进程
除非内存不能满足所有前端进程和可见进程)

4. 后端进程。持有对当前用户不可见的Activity的进程(它的的onStop()方法被调用)。
这些进程不直接影响用户的体验。提供它们是让activity的生命周期正确(详见Activity)
,系统可以在任何时间为了保证前面三种类型的进程而杀死此类进程。通常有很多进程在
运行,它们被保持在一个LRU列表中从而保证在内存过低之前有最多的进程对用户可见。

5. 空进程。不持有任何活动的应用组件。存在的原因是为了提高下一个程序组件启动速度。
因此系统经常杀死此类进程确保空进程占用的系统资源和底层内核占用的资源平衡。

当决定如何分类一个进程时,系统会收集当前活动进程包含的所有组件的重要水平。参见Activity
Service和IntentReceiver文档获取更详细的组件对进程生命周期的影响信息。这些类的文档
详细描述了它们对应用生命周期的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值