activity 的启动模式

1,默认启动方式 (standard

Activity1->Activity2->Activity3

1.1运行adb shell  dumpsys activity  查看栈的情况

1.2


由此可发现activity是先进的在栈底

此时 我们按下finish,在次运行adb shell  dumpsys activity

 

由此 我们证实activity是先进后出

 

1.3 此时我们使用代码跳转进入activity2

Activity1->Activity2->Activity3-activity3

运行adb shell  dumpsys activity 查看

 

 

 

由此证实,activity的默认启动方式:可以有多个相同的实例

 

 

2.singleTop 

<activity
    android:name=".activity_task.Activity1"
    android:launchMode="singleTop">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>

        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>
<activity
    android:name=".activity_task.Activity2"
    android:launchMode="singleTop"/>
<activity
    android:name=".activity_task.Activity3"
    android:launchMode="singleTop"></activity>

 

 

Activity1->Activity2->Activity3

 

2.1 此时我们再次加载activity3(Activity1->Activity2->Activity3-activity3)

运行adb shell  dumpsys activity查看

 

 

 

由此:我们可以证实:Activity3 被重用

2.2 此时我们跳转去activity2Activity1->Activity2->Activity3-activity3-activity2

运行shell 命令

 

 

此时发现activity2 在次入栈

 

由此我们可以得出结论:如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。

 

3.3singTask (Activity1->Activity2->Activity3)

 

 

3.4 此时我们再次跳转activity3Activity1->Activity2->Activity3->activity3,运行命令查看

 

 

发现activity3 被重用

3.5  此时我们在跳转去activity2 运行命令查看

 

发现activity3被移除出栈

 

由此我们得出结论:在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。

 

 

4.singleInstance(Activity1->Activity2->Activity3)

4.1  不论启动activity1,activity2,activity3,都会只存在一个实例


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值