activity 的启动模式 详细实验报告。。。

activity 的启动模式有4种: “standard” (默认模式), “singleTop”,”singleTask”,”singleInstance”

四种模式的作用:

这里写图片描述

文档中解释的 intent.setFlags 中的 Flag

这里写图片描述

测试1:manifest中未设置启动模式(即使用默认的启动模式),MainActivity一开始已经有启动
    Intent intent = new Intent(TestActivity.this,
            MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("MainActivity", "abababab");
    startActivity(intent);
  • 结果:MainActivity 重新调用了onCreate()
测试2:manifest中设置了启动模式(singleTask),MainActivity一开始已经有启动
    Intent intent = new Intent(TestActivity.this,
            MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("MainActivity", "abababab");
    startActivity(intent);
  • 结果:MainActivity 调用了onNewIntent()
测试3:manifest中设置了启动模式(singleTop),MainActivity启动自己
    Intent intent = new Intent(MainActivity.this,
            MainActivity.class);
    intent.putExtra("MainActivity", "abababab");
    startActivity(intent);
  • 结果:MainActivity 调用了onNewIntent()
测试4:manifest中未设置启动模式(使用默认standard),MainActivity一开始已经有启动
    Intent intent = new Intent(TestActivity.this,
            MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP| Intent.FLAG_ACTIVITY_SINGLE_TOP);
    intent.putExtra("MainActivity", "abababab");
    startActivity(intent);
  • 结果:MainActivity 没有调用onCreate(),调用了 onNewIntent()
测试5:manifest中未设置启动模式(使用默认standard),MainActivity一开始已经有启动
    Intent intent = new Intent(TestActivity.this,
            MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP| Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.putExtra("MainActivity", "abababab");
    startActivity(intent);
  • 结果:MainActivity 调用onCreate(),没有调用onNewIntent()

总结

  • 启动模式 singleTop 对应的Flag 是 Intent.Intent.FLAG_ACTIVITY_SINGLE_TOP

  • 启动模式 singleTask 对应的Flag 是 Intent.Intent.FLAG_ACTIVITY_NEW_TASK

  • 默认的启动模式(standard),当使用 flag为 Intent.FLAG_ACTIVITY_CLEAR_TOP 时会先将自己及以上的activity移除栈,再重新启动 该activity

  • 当使用Intent.FLAG_ACTIVITY_CLEAR_TOP| Intent.FLAG_ACTIVITY_SINGLE_TOP 的时候,启动模式single top 会覆盖默认的启动模式 standard。所以在移除上面的activity 的时候会调用自己的 OnNewIntent() 而不会重新 onCreate()

  • 当使用 Intent.FLAG_ACTIVITY_CLEAR_TOP| Intent.FLAG_ACTIVITY_NEW_TASK 的时候,设置的启动模式为single task 但是当发现该activity 已经存在的时候,交给了默认的standard 处理cleartop,所以会重新onCreate() 而不会调用 onNewIntent().

这是实验结果,有什么不对的地方,请大家指出

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值