在做版本升级时,我们的版本升级采用的是 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()