2011-9-27 21:01:43

 

2011-9-27 21:01:43

Activity的实例化与启动

Activity实例化是由Android系统完成,在用户点击执行一个Activity或者另一个Activity需要这个Activity执行的时候,如果该Activity的实例不存在,Android系统都会实例化之,并在该Activity所在进程的主线程中调用该Activity的onCreate()方法,实现Activity实例化时的工作。

所以,Activity::onCreate()是系统实例化Activity时,Activity可做的自身初始化的时机。在这里可以实例化变量,调用Activity::setContentView()设置UI显示内容。

一般的,Activity实例化之后,就要启动该Activity,这样会在该Activity所在进程的主线程中顺序调用Activity的onStart(), onResume()。回头看图一Activity的生命周期的典型时序,一般onStart()在所有的时序中都不是很特别的过程,所以一般不怎么实现。onResume()在暂停继续流程中很重要,后文再讲。

Activity被STOP可能是完全被别的Activity覆盖掉了,也可能是用户显式的按了BACK或HOME键。Activity被Stop之前,它的onStop()方法会被提前调用,来做些Stop前的处理。如果处于STOPPED的Activity再次运行,它的onRestart()方法会被调用,这是区分其他调用场景,比较合适的实现处理的地方。

注意,因为处于PAUSED状态的Activity在内存极端不足的情况下,它所在的进程也可能被杀掉,这样onStop()在被杀掉前,不一定会被调用,所以onPause()是比onStop()更合适的保留信息到永久存储区的时机。

Activity被销毁可能是显式的按了BACK键,也可能是处于PAUSED或STOPPED状态,因为内存不足而被杀掉的。还有种情况是配置信息改变(比如屏的方向改变)之后,根据设置需要杀掉所有的Activity(是否关闭还要看Activity自己的配置),再重新运行他们。

被系统隐式杀死的Activity,在被杀死(onStop()调用)之前,一般的会调用onSaveInstanceState()保留该Activity此时的状态信息。该方法中传入Bundle参数,可在此方法中把此时的状态信息写入,系统保留这这些系统。而当该Activty再次被实例化运行时,系统会把保留在Bundler的信息再次以参数形式,通过onCreate()方法传入。

一般,onSaveInstanceState()中保留UI的信息,永久存储的信息最好还是在onPause()中保存。Activity的onSaveInstanceState()已经缺省实现来保留通用View的UI信息,所以不管你保留与否当前Activity的信息,通常都要在onSaveInstanceState()先调用一下super.onSaveInstanceState()保留通用的UI信息。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值