Activity生命周期及创建模式

来源:互联网 发布:tda分析软件正版费用 编辑:程序博客网 时间:2024/05/29 07:15

Actiivty的生命周期,姑且理解为其方法的调用顺序

onCreate-onStart-onResume-onPause-onStop-onDestory。

如果是返回到这个Activity,就是onRestart-onStart

一般我们在onCreate的时候就加载控件,配置布局文件,如果是在onStart中写加载控件,有可能在返回这个Activity又再调用一次onStart导致多次加载,故不建议在onStart中写。


Activity的创建模式,或者说启动模式,有4种,standard,singleTop,singleTask,singleInstance

standard就是默认的启动模式,一般不声明都模式是这种,它是每次都会创建。比如启动了ActivityA,然后通过A启动B,现在在B中不通过返回键,但是要跳转到A(如在列表页选择添加,添加完成后返回列表页一样)。如果是这种模式,那么会再再次创建A,相当于历史栈里面是A-B-A。


singleTop是栈顶模式,必须在Menifest.xml中手动声明 android:launchMode="singleTop"。特点就是只要处于栈定,不再创建,如上面的例子,A创建B,B再创建A,如果A声明为singleTop模式,那么不会再次创建A,而是直接调用A的onStart方法。

也适用于那种防止多次点击(因网络延时导致)创建多次的场景,缺点是只使用于相邻两个Activity切换


singleTask是单任务模式,android:launchMode="singleTask"。特点是在整个栈中,只要有一个实例,那么将不再创建。使用场景,A创建B,B创建C,C创建D,D再直接返回A。如果此时A用singleTop模式,肯定没用,因为回退栈顶变成C了。但是如果A声明为单任务模式,那么将可以直接调用A,同时自动销毁B,C,D

这种模式其实可以理解为多个Activity下的singleTop模式


singleInstance是单实例模式,android:launchMode="singleInstance"。特点是它会创建一个独立的栈,专门存放这个实例。其他应用也可以调用它,注意是其他应用。比如应用A创建了ActivityA,A要访问应用B中的ActivityB(例如完成支付),成功后再返回A,如果是之前的模式,必定创建。如果A声明为单实例模式,那么不会,而是可以直接调用。

可以理解为多应用下的singleTask模式。使用例子:浏览器。


0 0