singleTask 模式onNewIntent调用的时机以及Intent值的变化

现在 是三个activity ,MainActivity启动 BActivity(singleTask) ,BActivity启动 CActivity,CActivity还会载回到BActivity。
在这三个除了BActivity是singleTask外,其余都是standard,
A-----B-------C---------B
A------B 传递

  Intent intent = new Intent(this,BActivity.class);
  intent.putExtra("bundle","MainActivity");
  startActivity(intent);

B------C

        Intent intent = new Intent(this, CActivity.class);
        intent.putExtra("bundle", "BActivity");
        startActivity(intent);

C--------B

        Intent intent = new Intent(this,BActivity.class);
        intent.putExtra("bundle","CActivity");
        startActivity(intent);

调用的时机:
singleTask模式:
第一次进入:onCreate onStart
在栈顶再次进入:onNewIntent
不在栈顶再次进入:onNewIntent onRestart onStart
按home键再次进入:onRestart onStart
按返回键:onRestart onStart

Intent的变化是
在onNewIntent 通过intent.getStringExtra("bundle") 得到的是C传递过来的值
但是onRestart onStart onResume得到的还是A启动B时传递的值

singleTask 模式onNewIntent调用的时机以及Intent值的变化

在onNewIntent 方法上写

`setIntent(intent);`

之后 onRestart onStart onResume 得到的就是最新的C传递过来的值了,所以在使用的时候要清楚使用的哪个Intent
singleTask 模式onNewIntent调用的时机以及Intent值的变化

SingleTake 举例一个应用场景
A 登录页面,有设置密码的Button ,点击进入B 设置密码,输入完成进入C 确认密码,然后再回到A, 并伴随一个状态值,A 的Button由设置密码变成了修改密码,这时候A需要设置成SingleTask模式

SingleTop 举例一个应用场景
比如有推送,推送点击需要进入一个详情页面,如果当前停留在消息详情界面A,突然来推送消息了,点击推送消息,又创建了一个详情界面A,按返回键back,用户会发现,点击了返回怎么还是停留在这个详情界面A呢,这样造成视觉差异

singleTask和singleInstance模式下,onAcitivityResult方法执行会有影响。要用onActivityResult方法,那么这个目标activity一定不能是这种模式。
另外singleInstance这个模式使用起来有很多坑
https://blog.****.net/Super_xiaojian/article/details/81027530