Android四大组件之一Activity生命周期及解释

          在android中,应用程序的生命周期并不是由应用程序自身直接控制的,而是由系统,当系统需要释放内存来运行新进程或者保证某些后台进程和前端进程顺利执行的时候才会释放相应应用程序的资源,移除重要性最低的进程。

android中进程的层次如下(重要性由高到低):
    1、前端进程。顾名思义,前端进程就是目前显示在屏幕上和用户交互的进程,在系统中前端进程数量很少,而这种进程是对用户体验的影响最大,只有系统的内存稀少到不足以维持和用户的基本交互时才会销毁前端进程。因此这种进程重要性是最高的。
    2、可见进程。可见进程也拥有一个可视化的界面,只是目前不是最上层界面(最上层界面在前端进程里面),可见进程一般调用了OnPause(),可见进程比前端进程重要性低,但是在交互方面影响还是很大,因为用户可能随时切换过去,所以系统不会轻易销毁它。
    3、服务进程。一个服务进程就是一个Service,它调用了startService(),就是UNIX中说的守护进程,对用户不可见,但是保证了一些重要的事件被监听或者维持着某些状态,比如网络数据传输、后台音乐播放,这类进程在内存不足且为了保证前端交互的顺利进行的时候被销毁。
    4、后台进程。这里叫后台进程可能会和一般意义上的后台进程混淆,要说明的是,android里的后台进程是调用了OnStop()的,可以理解成用户暂时没有和这个进程交互的愿望,所以这里后台进程有点“待销毁”的意思。
    5、空进程。这是一种系统缓存机制,其实就是个进程的外壳,当有新进程创建的时候,这个空进程可以加快进程创建速度,当系统内存不足的时候,首先销毁空进程。
android中进程重要性层次

进程从创建到被销毁全过程
    一个进程创建时系统会为它创建一个Activity(活动),紧接着调用onCreate(),onCreate()中主要是进行一些初始化,例如读取XML资源文件创建布局,设置主界面各种监听函数等等,每个进程都会调用onCreate()。
    接着是onStart(),需要说明的是,在默认 Activity中(就是程序一启动我们看到的那个Activity实体),程序员在写代码的时候并不需要显式去调用onStart(),系统会默默帮你调用;但是,当你需要在这个程序中创建除了默认Activity以外的所有新Activity的时候,你必须显式调用这个onStart(),这个 onStart()有个新名字叫做startActivity(intent),这里的intent表示一个意图,就是我们想创建的新Activity,这个扯远了。
    然后是onResume(),当我们从主程序界面跳到别的地方再跳回来的时候调用onResume()。然后程序就跑起来了,我们叫他进程 A,如果这个时候其他进程变成了前端进程(进程B),此时进程A就会调用onPause(),这会保存进程的状态做数据持久化。这时候有两种情况,进程A 再次成为前端进程,于是进程A调用onResume()来恢复运行;如果在进程A处于onPause()这段时间内系统内存不足了,进程A就有可能被销毁,来为别的进程腾出内存(为什么是“可能”被销毁?详见上面的android进程重要性层次说明),如果用户再次切换到进程A,这是系统只是重新创建一个进程,它不再是进程A了(因为此时进程A已经被销毁了)。
    当onPause()被调用以后用户按了返回键(back),那进程A会调用 onStop(),之前说了用户此时已经没有和进程A交互的愿望了,所以进程A成为了“待销毁”的对象(为什么没有直接销毁呢?答案还是在android 进程重要性层次说明)。那么如果在一个进程A还没有被销毁的时刻用户再次切换到进程A,进程A又成为了前端进程,此时进程A会调用 onRestart(),进而调用onStart()来再次开始进程(此时重新开始的还是进程A本身,没有换成其他的,因为进程A还未被销毁),在这里可以理解成把进程A“唤醒”了。如果很不幸,系统内存又不足了,调用了onStop()后的进程A可能再次被销毁,就像图上画的那样,这里不再赘述。至于 onStop()后面的onDestroy()调用是在系统内存不足的时候由系统调用来销毁进程和释放内存的。



    Android生命周期如图:

Activity有三种基本状态:

  1. Active:处于屏幕前景(当前task的栈顶Activity处于Active状态),同一时刻只能有一个Activity处于Active状态;
  2. Paused状态:处于背景画面画面状态,失去了焦点,但依然是活动状态;
  3. stopped:不可见,但依然保持所有的状态和内存信息。

可以调用finish()结束处理Paused或者stopped状态的Activity。

各种状态之间通过下列的函数调用转换:

void onCreate(Bundle savedInstanceState)
void onStart()
void onRestart()
void onResume()
void onPause()
void onStop()
void onDestroy()


 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值