Android 启动模式总结(一)

学而不思则罔,思而不学则殆
Activity是Android四大组件之一,是用户能直接感受的组件。
Activity有四种启动模式

四种启动模式

启动模式说明
android:launchMode=“standard”普通模式(默认默认),每次都会新建同一栈内
android:launchMode=“singleTop”栈顶复用同一栈内
android:launchMode=“singleTask”栈内复用同一栈内
android:launchMode=“singleInstance”全局唯一不同栈内

standard

默认的启动模式,就是但你startActivity的时候都会重新创建一个新的Activity
启动三个AActivity的效果如下:

adb shell dumpsys activity p com.example.handlerstudy | grep ActivityRecord
      - ActivityRecord{89c00da u0 com.example.handlerstudy/.AActivity t303}
      - ActivityRecord{5c1423e u0 com.example.handlerstudy/.AActivity t303}
      - ActivityRecord{d785648 u0 com.example.handlerstudy/.AActivity t303}

在这里插入图片描述

singleTop

栈顶复用,当启动的Activity是位于栈顶的时候不在重新create一个,直接复用,走声明周期方法是onNewIntent

有两个Activity,A和B,B是singleTop
当A启动B,B再启动B的时候不会新建一个B,而是直接复用B

在这里插入图片描述

有两个Activity,A和B,B是singleTop
A启动B,B启动A,A再启动B的时候,不会复用会直接在新建一个B
因为B没有在栈顶,不会复用

在这里插入图片描述

singleTask

栈内复用,意思是只要站内有就复用,并且把复用的Activity之上的所有Activity都出栈

有三个Activity,A,B,C,A是singleTask,BC都是普通启动模式
A启动B
B启动C
C再启动A,这个时候栈内存在A,会复用,并把BC出栈

可以看一下生命周期:

2020-07-11 19:53:51.787 18621-18621/com.example.handlerstudy D/zhangyu.AActivity: start BActivity //A启动B
2020-07-11 19:53:51.820 18621-18621/com.example.handlerstudy D/zhangyu.AActivity: onPause
2020-07-11 19:53:51.845 18621-18621/com.example.handlerstudy D/zhangyu.BActivity: onCreate
2020-07-11 19:53:51.871 18621-18621/com.example.handlerstudy D/zhangyu.BActivity: onStart
2020-07-11 19:53:51.873 18621-18621/com.example.handlerstudy D/zhangyu.BActivity: onResume
2020-07-11 19:53:52.255 18621-18621/com.example.handlerstudy D/zhangyu.BActivity: start CActivity //B启动C
2020-07-11 19:53:52.285 18621-18621/com.example.handlerstudy D/zhangyu.BActivity: onPause
2020-07-11 19:53:52.315 18621-18621/com.example.handlerstudy D/zhangyu.CActivity: onCreate
2020-07-11 19:53:52.345 18621-18621/com.example.handlerstudy D/zhangyu.CActivity: onStart
2020-07-11 19:53:52.346 18621-18621/com.example.handlerstudy D/zhangyu.CActivity: onResume
2020-07-11 19:53:52.538 18621-18621/com.example.handlerstudy D/zhangyu.AActivity: onStop
2020-07-11 19:53:52.894 18621-18621/com.example.handlerstudy D/zhangyu.BActivity: onStop
2020-07-11 19:53:53.862 18621-18621/com.example.handlerstudy D/zhangyu.CActivity: start AActivity //C启动A
2020-07-11 19:53:53.954 18621-18621/com.example.handlerstudy D/zhangyu.CActivity: onPause
2020-07-11 19:53:53.987 18621-18621/com.example.handlerstudy D/zhangyu.BActivity: onDestroy //B出栈
2020-07-11 19:53:54.019 18621-18621/com.example.handlerstudy D/zhangyu.AActivity: onRestart
2020-07-11 19:53:54.021 18621-18621/com.example.handlerstudy D/zhangyu.AActivity: onStart
2020-07-11 19:53:54.022 18621-18621/com.example.handlerstudy D/zhangyu.AActivity: onNewIntent //A复用
2020-07-11 19:53:54.022 18621-18621/com.example.handlerstudy D/zhangyu.AActivity: onResume
2020-07-11 19:53:54.554 18621-18621/com.example.handlerstudy D/zhangyu.CActivity: onStop
2020-07-11 19:53:54.561 18621-18621/com.example.handlerstudy D/zhangyu.CActivity: onDestroy //C出栈

在这里插入图片描述

singleInstance

Activity在手机中存在唯一一个实例,且跟其他的Activity不在同一个栈中

有三个Activity,A,B,C,C是singleInstance,AB都是普通启动模式
A启动B
B启动C,C在新的栈中
C在启动C,直接复用
C启动B
生命周期如下:

2020-07-11 20:09:25.968 19133-19133/com.example.handlerstudy D/zhangyu.AActivity: onCreate
2020-07-11 20:09:25.987 19133-19133/com.example.handlerstudy D/zhangyu.AActivity: onStart
2020-07-11 20:09:25.987 19133-19133/com.example.handlerstudy D/zhangyu.AActivity: onResume
2020-07-11 20:09:28.511 19133-19133/com.example.handlerstudy D/zhangyu.AActivity: start BActivity //A启动B
2020-07-11 20:09:28.546 19133-19133/com.example.handlerstudy D/zhangyu.AActivity: onPause
2020-07-11 20:09:28.579 19133-19133/com.example.handlerstudy D/zhangyu.BActivity: onCreate
2020-07-11 20:09:28.600 19133-19133/com.example.handlerstudy D/zhangyu.BActivity: onStart
2020-07-11 20:09:28.600 19133-19133/com.example.handlerstudy D/zhangyu.BActivity: onResume
2020-07-11 20:09:29.153 19133-19133/com.example.handlerstudy D/zhangyu.AActivity: onStop
2020-07-11 20:09:29.503 19133-19133/com.example.handlerstudy D/zhangyu.BActivity: start CActivity //B启动C
2020-07-11 20:09:29.537 19133-19133/com.example.handlerstudy D/zhangyu.BActivity: onPause
2020-07-11 20:09:29.626 19133-19133/com.example.handlerstudy D/zhangyu.CActivity: onCreate
2020-07-11 20:09:29.648 19133-19133/com.example.handlerstudy D/zhangyu.CActivity: onStart
2020-07-11 20:09:29.649 19133-19133/com.example.handlerstudy D/zhangyu.CActivity: onResume
2020-07-11 20:09:30.355 19133-19133/com.example.handlerstudy D/zhangyu.BActivity: onStop
2020-07-11 20:09:33.162 19133-19133/com.example.handlerstudy D/zhangyu.CActivity: start CActivity //C启动C
2020-07-11 20:09:33.194 19133-19133/com.example.handlerstudy D/zhangyu.CActivity: onPause
2020-07-11 20:09:33.194 19133-19133/com.example.handlerstudy D/zhangyu.CActivity: onNewIntent //复用C
2020-07-11 20:09:33.194 19133-19133/com.example.handlerstudy D/zhangyu.CActivity: onResume
2020-07-11 20:09:34.917 19133-19133/com.example.handlerstudy D/zhangyu.CActivity: start BActivity //C启动B
2020-07-11 20:09:34.958 19133-19133/com.example.handlerstudy D/zhangyu.CActivity: onPause
2020-07-11 20:09:34.978 19133-19133/com.example.handlerstudy D/zhangyu.BActivity: onCreate
2020-07-11 20:09:35.002 19133-19133/com.example.handlerstudy D/zhangyu.BActivity: onStart
2020-07-11 20:09:35.002 19133-19133/com.example.handlerstudy D/zhangyu.BActivity: onResume
2020-07-11 20:09:35.849 19133-19133/com.example.handlerstudy D/zhangyu.CActivity: onStop

应用栈的情况:

    Activities:
      - ActivityRecord{42023ab u0 com.example.handlerstudy/.AActivity t326}
      - ActivityRecord{58634ac u0 com.example.handlerstudy/.BActivity t326}
      - ActivityRecord{392d512 u0 com.example.handlerstudy/.CActivity t327}
      - ActivityRecord{22ce3d2 u0 com.example.handlerstudy/.BActivity t326}

可以看到C在t327 AB在t326,属于不同的栈
在这里插入图片描述
此时按返回键是什么情况呢?
按返回键-》B回到B->按返回键-》B回到A->按返回键,此时t326中没有其他的Activity了,这个时候会退回到C->按返回键-》退出应用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值