简单深入了解Activity

来源:互联网 发布:网络音频广播系统 编辑:程序博客网 时间:2024/05/31 18:54

今天深入了解一下Activity组件。

Activity的状态情况通常情况下系统会自动保存,只有当我们需要保存额外的数据的时候才需要用到这样的功能。

调用onPause()和onStop()方法后的Activity实例仍然保存在内存中,所以Activity的信息和状态是不会消失的,当activity从后台转变成前台之后,所有的改变都会得到保留。

当内存不足的时候,系统可能会回收Activity并摧毁,此时内存就不会有了Activity的实例对象了,为了避免情况,我们可以选择性的覆写OnSaveInstanceState(),接受一个Bundle参数,开发者可以将状态存储到这个Bundle的对象当中,万一中途系统急刹车,将Acitivity销毁了,用户重新启动该Activity并且调用onCreate(),bundle就会传回去数据,回到被销毁之前的状态了。


---------------------------------------------------------------------------------------------------------------------


Activity四种启动模式。

1.standard

2.singleTop

3.singleTask

4.singleInstance

首先我们要知道的是,Activity实例是存在于任务栈里的,既然是栈,具有先进先出(FIFO)的特点。好比一把手枪上子弹,先进去的子弹先出来是一个意思。


1、standard(标准模式)

系统默认的启动模式,启动一个activity时,不管栈里面存不存在这个实例,系统都会为它新建一个activity实例,压入栈里。

2、singleTop(栈顶复用模式)

启动一个activity的时候,如果当前的activity在栈顶,那么系统就不会去再一次创建这个activity实例了,而是直接调用栈顶的activity的onNewIntent()。


3、singleTask(栈内复用模式)

这个启动模式是相对于其他应用的activity,当只有启动其他activity的时候才会创建一个新的任务栈。系统会创建一个新的任务,并将新的activity放入到这个新的栈的底部,就是栈底。如果已经存在就不在创建这个实例了。


4、singleInstance(单实例模式)

这种启动模式和singletask有点相似,当一个activity被声明成singleinstance。那系统不会再往被声明成singleInstance的任务里面再添加新的activity。也就是说一个栈里面只有一个activity也就是被声明的。


-------------------------------------------------------------------------------------------------------------------

singleTop和standard模式的区别就是,singleTop是不再创建一个已经创建过的activity实例了,当跳转的对象就是位于栈顶的activity,系统不会再生成一个新的activity实例。



原创粉丝点击