在做版本升级时,我们的版本升级采用的是 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启动模式的Activity期望避免多次创建,以实现栈顶复用。然而,开发者发现即使设置为singleTop,onCreate()仍然会被执行两次,而非预期的onNewIntent()。问题在于,当第一个Activity销毁后,第二次启动的Activity由于找不到栈顶复用的实例,因此会重新创建。同时,文章提到了可能的多进程问题导致推送通知处理的重复,但代码检查并未发现此问题。解决方案在于正确理解和应用singleTop模式,以及排查多进程可能导致的异常情况。

173

被折叠的 条评论
为什么被折叠?



