四种启动模式分别是:
standard(默认),singleTop,singleTask,singleInstance
设置启动模式后,关于Activity生命周期变化
- 创建MainActivity跳转到TwoActivity,再到销毁TwoActivity的两个Activity的生命周期变化(standard(默认))
V/MainActivity: MainActivity onCreate
V/MainActivity: MainActivity onStart
V/MainActivity: MainActivity onResume
V/MainActivity: MainActivity onPause
V/TwoActivity: TwoActivity onCreate
V/TwoActivity: TwoActivity onStart
V/TwoActivity: TwoActivity onResume
V/MainActivity: MainActivity onStop
V/TwoActivity: TwoActivity onPause
V/MainActivity: MainActivity onRestart
V/MainActivity: MainActivity onStart
V/MainActivity: MainActivity onResume
V/TwoActivity: TwoActivity onStop
V/TwoActivity: TwoActivity onDestroy
- 配置TwoActivity的启动模式为singleInstance,MainActivity启动模式不变(standard)生命周期无变化。
<activity android:name=".MainActivity"
android:launchMode="standard">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".TwoActivity"
android:launchMode="singleInstance">
</activity>
- MainActivity和TwoActivity都配置成singleInstance,从界面的变化来看,开启了一个新的Task栈,而且当再次启动该activity的实例时,会重用已存在的任务和实例。并且会调用这个实例 的onNewIntent()方法,将Intent实例传递到该实例中
findViewById(R.id.btn_two).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//finish();
//这里是再次启动MainActivity的实例
Intent intent = new Intent(TwoActivity.this,MainActivity.class);
startActivity(intent);
}
});
//生命周期变化 如下:
V/MainActivity: MainActivity onCreate
V/MainActivity: MainActivity onStart
V/MainActivity: MainActivity onResume
//跳转到TwoActivity
V/MainActivity: MainActivity onPause
V/TwoActivity: TwoActivity onCreate
V/TwoActivity: TwoActivity onStart
V/TwoActivity: TwoActivity onResume
V/MainActivity: MainActivity onStop
//点击TwoActivity界面的按钮btn_two跳转到MainActivity,界面的传值使用(onNewIntent)
V/TwoActivity: TwoActivity onPause
V/MainActivity: MainActivity onNewIntent
V/MainActivity: MainActivity onRestart
V/MainActivity: MainActivity onStart
V/MainActivity: MainActivity onResume
V/TwoActivity: TwoActivity onStop
//然后又跳到TwoActivity
V/MainActivity: MainActivity onPause
V/TwoActivity: TwoActivity onNewIntent
V/TwoActivity: TwoActivity onRestart
V/TwoActivity: TwoActivity onStart
V/TwoActivity: TwoActivity onResume
V/MainActivity: MainActivity onStop
- TwoActivity的启动模式singleTop,MainActivity的启动模式standard,如果我从MainActivity跳转到TwoActivity时生命周期流程
V/MainActivity: MainActivity onCreate
V/MainActivity: MainActivity onStart
V/MainActivity: MainActivity onResume
//开始跳转
V/MainActivity: MainActivity onPause
V/TwoActivity: TwoActivity onCreate
V/TwoActivity: TwoActivity onStart
V/TwoActivity: TwoActivity onResume
V/MainActivity: MainActivity onStop
//点击返回(finish)时运行
V/TwoActivity: TwoActivity onPause
V/MainActivity: MainActivity onRestart
V/MainActivity: MainActivity onStart
V/MainActivity: MainActivity onResume
V/TwoActivity: TwoActivity onStop
V/TwoActivity: TwoActivity onDestroy
//再点击跳转到TwoActivity
V/MainActivity: MainActivity onPause
V/TwoActivity: TwoActivity onCreate
V/TwoActivity: TwoActivity onStart
V/TwoActivity: TwoActivity onResume
V/MainActivity: MainActivity onStop
- TwoActivity的启动模式singleTask,MainActivity的启动模式standard,如果我从MainActivity跳转到TwoActivity时生命周期流程,(singleTask只允许在系统中有一个Activity实例)
V/MainActivity: MainActivity onCreate
V/MainActivity: MainActivity onStart
V/MainActivity: MainActivity onResume
//开始跳转TwoActivity
V/MainActivity: MainActivity onPause
V/TwoActivity: TwoActivity onCreate
V/TwoActivity: TwoActivity onStart
V/TwoActivity: TwoActivity onResume
V/MainActivity: MainActivity onStop
//点击TwoActivity的btn_two跳转回MainActivity时
V/TwoActivity: TwoActivity onPause
//回再次创建MainActivity
V/MainActivity: MainActivity onCreate
V/MainActivity: MainActivity onStart
V/MainActivity: MainActivity onResume
V/TwoActivity: TwoActivity onStop
//再跳转到TwoActivity时
V/MainActivity: MainActivity onPause
V/TwoActivity: TwoActivity onNewIntent
V/TwoActivity: TwoActivity onRestart
V/TwoActivity: TwoActivity onStart
V/TwoActivity: TwoActivity onResume
//而且MainActivity销毁了
V/MainActivity: MainActivity onStop
V/MainActivity: MainActivity onDestroy