Activity的生命周期及其四种启动模式

来源:互联网 发布:数据库数据字典怎么写 编辑:程序博客网 时间:2024/06/07 10:15

Activity启动流程图
两个Activity之间相互startActivity跳转. Activity a–>Activity b

1.首先启动Activity a的时候依次走onCreate –> onStart –> onResume 这三个方法一次执行完后 activity真正运行
2. Activity a在锁屏 和 跳到别的Activity b的时候 onPause –> onStop
3. 当Activity a解锁开屏的时候 onRestart onStart onResume

场景一:standard模式 startActivity
Activity a–>Activity b –>Activity a 每跳转一次都会执行onCreate –> onStart –> onResume,因为每次跳转都会创建新的Activity,并叠加起来

场景二:singleInstance模式 startActivity

场景二:singleTask模式 Activity a–>Activity b–>Activity a–>Activity b,其中Activity b是singleTask 而Activity a是standard

Activity a:onCreate –> onStart –> onResume 点击startActivity到Activity b
Activity a: onPause –> onStop
Activity b:onCreate –> onStart –> onResume 点击startActivity到Activity a
Activity b:onPause –> onStop
在次点击startActivity到Activity b
Activity b:onCreate –> onStart –> onResume

四种启动模式: 根据跳转到的activity选择是否创建新的实例还是用旧的
singleTask:如果某个Activity是singleTask模式,那么Task栈中将会只有一个该Activity的实例。例如:现在栈的情况为:A B C D。B的Launch mode为singleTask,此时D通过Intent跳转到B,则栈的情况变成了:A B。而C和D被弹出销毁了,也就是说位于B之上的实例都被销毁了。(若跳转到这个实例的时候,已经存在了,则会把该实例以上的所有实例销毁)

singleTop:如果某个Activity的Launch mode设置成singleTop,那么当该Activity位于栈顶的时候,再通过Intent跳转到本身这个Activity,则将不会创建一个新的实例压入栈中。例如:现在栈的情况为:A B C D。D的Launch mode设置成了singleTop,那么在b中启动Intent跳转到D,那么将不会新创建一个D的实例压入栈中,此时栈的情况依然为:A B C D。但是如果此时B的模式也是singleTop,D跳转到B,那么则会新建一个B的实例压入栈中,因为此时B不是位于栈顶,此时栈的情况就变成了:A B C D B。(就是不在栈顶就创建,在则不创建新的)

阅读全文
0 0
原创粉丝点击