关于singleTop 并没有调用onNewIntent()

在版本升级场景中,使用singleTop启动模式的Activity期望避免多次创建,以实现栈顶复用。然而,开发者发现即使设置为singleTop,onCreate()仍然会被执行两次,而非预期的onNewIntent()。问题在于,当第一个Activity销毁后,第二次启动的Activity由于找不到栈顶复用的实例,因此会重新创建。同时,文章提到了可能的多进程问题导致推送通知处理的重复,但代码检查并未发现此问题。解决方案在于正确理解和应用singleTop模式,以及排查多进程可能导致的异常情况。
在做版本升级时,我们的版本升级采用的是 activity。在收到版本升级推送时,跳转到版本升级界面。
因为是版本升级不论当前在哪个界面,都要跳转到版本更新界面。所以写在BaseActivity 所以如果有多个activity存活时,也就是存在多个BaseActivity 的实例,那么就会执行多次。 所以想到将activity的启动模式设置为singleTop  栈顶复用。
但是在调试时,发现,在跳转到版本升级界面,关掉后,又再次打开一个版本升级activity。按照思路来讲,不应该出现这样的问题。

就好像下面的代码:

@Override
        public void onClick(View view) {
           // attemptLogin();
            startActivity(new Intent(LoginActivity.this,SingleTopActivity.class));
            startActivity(new Intent(LoginActivity.this,SingleTopActivity.class));
        }

你会想,打开一个singleTopActivity 在执行第二次打开的时候不走 onCreate  而是走 onNewIntent()  

但是在调试时发现,会执行两次onCreate() 。

到底是什么原因呢?

你第一次开启activity时第二次的根本还没有启动,当你退出第一个时,这时才开启第二次的activity,但此时第一个activity已经destroy了,所以第二次的只能onCreate了。

在连续执行启动activity时 代码不执行。在你关掉时 执行第二次。

这在我的代码中,正好出错了。 因为我的项目中,是在收到推送来进行检查跳转到版本升级activity的。


我在代码中设置了一个tag,在进入更新界面后,再收到通知代码不处理。在版本升级的activity 的 onDestroy()将标志位改为false



至于极光推送重复问题,我和后台核实,是不是重复调用了。确认没有,但是我的APP代码检查了,也没有多次注册。

猜测可能是多进程的问题。

关于singleTop 并没有调用onNewIntent()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值