Activity 设置SingleTask模式,当栈中已有Activity实例时的生命周期

SingleTask模式在已经存在Activity实例时再次启动activity生命周期:
Activiyt的普通启动模式每次利用startActivity都会创建新的Activity实例,有些场景需要栈中只有一个Activity实例,类似app的主页MainActivity,这时就需要用到SingleTask。

SingleTask模式下会首先判断栈内是否已经存在该Activity的实例,如果存在实例,会将该实例之上所有的activity出栈(销毁),把该实例置于栈顶。如果不存在实例,才会重新创建该Activity的新实例,并且入栈。

普通的Activity启动后的生命周期为onCreate-》onstart-》onresume,每次利用Intent启动一个Activity都会创建新的实例,都会走上面的生命周期。

当launchMode设置为singleTask的时候,启动这个Activity时如果栈中已经存在一个实例,系统不会再创建新的实例,会直接传递到已有的Activity实例,这时不会再走onCreate方法而是调用onNewIntent方法,之后直接调用onstart,onresume,完整的过程为onNewIntent->onStart->onResume。

onNewIntent(Intent intent)方法参数为intent,传递的操作就在这个intent中,而不是onCreate中利用getIntent中获取的Intent。同步这个新的Intent需要利用 setIntent(intent);之后利用getIntent获取到的Intent就和onNewIntent的一致了。
附加:
如果在Activity上显示dailog,当dialog遮挡Activity的界面时会不会触发Activity的生命周期,答案是不会触发ActivityonPause,onResume等。

你可能感兴趣的:(android基础)