Activity的启动模式分析-之一

1. Activity的生命周期

 

1.  Activity的四种状态

应用程序的优先级是受最高优先级的Activity影响的。一般认为Activity有以下四种状态:

活动的:Activity是可视的、有焦点、可接受用户输入的。Android试图尽最大可能保持它活动状态,杀死其它Activity来确保当前活动Activity有足够的资源可使用。

暂停:在很多情况下,Activity可视但是没有焦点,不能接受用户输入,可能原因是被一个透明或者非全屏的Activity所覆盖。

停止: 当Activity不可视的,就是停止了。停止的Activity将仍然在内存中保存它所有的状态和成员信息。

待用: Activity被销毁后和被装载前,它是待用状态的。

 

onCreate :有一个参数BundlesavedInstanceState,该参数可能是start该activity时存放到Intent中的Bundle,也可能是之前调用 onSaveInstanceState(Bundle outState)方法保存的状态信息。

onStart :当Activity将被展现给用户时,触发该方法。

onRestart :当处于Stop状态的Activity需要再次展现给用户的时候,触发该方法。

onResume :当Activity能够和用户发生交互的时候,触发该方法。

onPause :当一个正在前台运行的Activity因为其它Activity需要前台运行而转入后台运行的时候,触发该方法。

onStop :当一个Activity不再展示给用户的时候,触发该方法。

onDestroy :当Activity被销毁的时候,触发该方法。

注意:无论现在是Pause状态还是Stop状态,当系统资源不足时,系统都会回收Activity的资源,当再次进入该Activity时进行重新创建。如果发生这种情况,可能onDestroy(),甚至是onStop()都没有得到执行。因此,如果有一些重要的数据和状态,需要在这种情况下也得到保存,就需要使用 onSaveInstanceState()函数,将重要的数据在销毁前进行保存,然后在onCreate()时重新读出。

onSaveInstanceState :保存Activity的状态。通常情况下,不需要重写覆盖该方法,在默认的实现中,已经提供了自动保存Activity所涉及到的用户界面组件的所有状态信息。在onStop()之前被调用,但是并不保证在onPause()之前or之后调用。

onRestoreInstanceState :恢复Activity的状态,在onStart()之后调用。通常情况下,不需要重写覆盖该方法,在默认的实现中,会根据onSaveInstanceState()保存的状态信息,自动恢复Activity所涉及到的用户界面组件的所有状态信息。 在onStart()和onPostCreate()之间被调用。

注意:onSaveInstanceState()和onRestoreInstanceState()只在系统资源不足,系统强行销毁Activity和重新创建Activity时起作用。在正常情况下,系统并不依赖二者做状态的备份和恢复,因为实验证明,即使override这两个函数为空实现,系统依然可以在back时或者Home键切出去再切回来,做到原样恢复。

2.  Home键和锁屏键对Activity生命周期的影响

1.      Home键会调用当前Activity的onPause()和onStop(),而锁屏键只会调用当前Activity的onPause()。这是因为,onPause()和onResume()之间的转换开销小,可以频繁的锁屏 onPause()和onResume();而onStop()和onStart()之间的转换开销大,用户一旦按Home键,意味着希望进行其它操作。

2.      当Activity被部分遮挡时(被Dialog样式的Activity遮挡),系统只进行onPause()操作,并没有进行onStop()操作,返回之后,执行onResume()。

3.      当启动和退出Dialog时,Dialog实际上属于Acitivity内部的界面,不会影响Acitivty的状态,系统不会进行任何生命周期回调函数的操作。

1.  正常启动和activity切换

Startup - launch

ActivityA: ====> onCreate()

ActivityA: ====> onStart()

ActivityA: ====> onPostCreate()

ActivityA: ====> onResume()

ActivityA: ====> onPostResume()

activity A --> activity B

ActivityA: ====> onSaveInstanceState()

ActivityA: ====> onPause()

ActivityB: ====> onCreate()

ActivityB: ====> onStart()

ActivityB: ====> onPostCreate()

ActivityB: ====> onResume()

ActivityB: ====> onPostResume()

ActivityA: ====> onStop()

Back

ActivityB: ====> onPause()

ActivityA: ====> onRestart()

ActivityA: ====> onStart()

ActivityA: ====> onResume()

ActivityA: ====> onPostResume()

ActivityB: ====> onStop()

ActivityB: ====> onDestroy()

Back(exit)

ActivityA: ====> onPause()

ActivityA: ====> onStop()

ActivityA: ====> onDestroy()

2.  Home Key

Home Key

ActivityA: ====> onSaveInstanceState()

ActivityA: ====> onPause()

ActivityA: ====> onStop()

Re-enter(bring back)

ActivityA: ====> onRestart()

ActivityA: ====> onStart()

ActivityA: ====> onResume()

ActivityA: ====> onPostResume()

3.  锁屏键

Power Key - lock screen

ActivityA: ====> onSaveInstanceState()

ActivityA: ====> onPause()

Power Key - unlock screen

ActivityA: ====> onResume()

ActivityA: ====> onPostResume()

4.  Dialog Activity遮挡

Activity A --> DialogActivity C

ActivityA: ====> onSaveInstanceState()

ActivityA: ====> onPause()

ActivityC: ====> onCreate()

ActivityC: ====> onStart()

ActivityC: ====> onPostCreate()

ActivityC: ====> onResume()

ActivityC: ====> onPostResume()

Back

ActivityC: ====> onPause()

ActivityA: ====> onResume()

ActivityA: ====> onPostResume()

ActivityC: ====> onStop()

ActivityC: ====> onDestroy()


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值