从0开始认识android(十三):进程和APP的生命周期

  我们知道,APP的生命周期是无法自我做主的, 系统会在内存不不够用的时候把后台的进程干掉,那系统是根据什么判断哪些进程应该被干掉,哪些应该保留呢?
  其实,系统会根据每个APP中四大组件的整体运行状态来将APP所在的进程分为不同的种类,以下就是系统区分的进程类型(被杀可能性由低到高):
  1.、前台进程
  即用户正在使用的app所在的进程,只要一个app的某些组件满足以下某个状态,那么这个app所在的进程就可以被看做前台进程:
  1.1、当某个activity正在与用户交互时,即这个activity生命周期处于onResume状态;
  1.2、当某个broadcastReceiver正在执行其onReceiver()方法中的代码时;
  1.3、当某个service正在执行其onCreate()或onStart()或onDestory()方法中的代码时。
  2、可视进程
  不是用户正在交互的进程,但用户能看见这个进程正在运行,如果把这个进程干掉,用户也能明显的知道进程被干掉了。满足以下某个条件的进程即可视进程:
  2.1、某个activity对用户可见,但是没有获取焦点,即生命周期处于onPause状态。典型的例子是在当前界面弹出一个dialog,界面的焦点被dialog抢占了。
  2.2、某个service通过Service.startForeground()的方法启动,用户可以在手机通知栏里看到这个service的运行状况。例如下载服务将下载进度显示在通知栏里。
  2.3、一些系统正在使用的服务(不是用户使用,但用户能感知这个服务正在运行),例如动态壁纸、输入法服务等。
  3、服务进程
  不是用户正在交互的进程,如果存在通过startService()方法启动在后台执行的service,用户看不见这个service,那么这个进程就可以叫做服务进程。
  4、缓存进程
  不是用户正在交互的进程,之所以叫缓存进程,是因为这类进程往往只持有一个或几个执行了界面状态缓存逻辑的activity:在前面《从0开始认识android(十一):Activity生命周期》一文中我们知道:除了用户通过手机返回键退出activity外,其他情况导致我们的activity进入stop状态之前,我们的界面都会先走onSaveInstance()方法,在这里我们就可以把当前界面的状态保存起来。
  当进程不是前台进程,也不是可视进程或服务进程时,如果一个后台进程持有少数几个执行了界面状态缓存逻辑的activity,那么这个进程就可以视为缓存进程。
  所以,当系统内存吃紧时,被干掉的后台进程的可能性从大到小依次:缓存进程——服务进程——可视进程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值