----官方解释 点击打开链接
--------- 单独来看launchMode = singleTask
MainActivity的启动模式设置为SingleTask
MainActivity2的启动模式设置为standard
默认启动MainActivity,然后在MainActivity里启动MainActivity2,再在MainActivity2里启动MainActivity,注意观察activity任务栈的情况:
当在MainActivity2里再次启动MainActivity时,MainActivity2被从Activity任务栈顶 移除并销毁,而使得MainActivity成为了栈顶实例。
------------ log
03-30 14:30:47.591 15740-15740/com.adnonstop.activitylifecycler I/MainActivity: onCreate: 1111111111111111111111
03-30 14:30:47.592 15740-15740/com.adnonstop.activitylifecycler I/MainActivity: onStart: 11111111111111111111111111
03-30 14:30:47.592 15740-15740/com.adnonstop.activitylifecycler I/MainActivity: onResume: 1111111111111111111111
启动MainActivity2
03-30 14:30:49.250 15740-15740/com.adnonstop.activitylifecycler I/MainActivity: onPause: 111111111111111111111111
03-30 14:30:49.279 15740-15740/com.adnonstop.activitylifecycler I/MainActivity2: onCreate: 2222222222222222222222222
03-30 14:30:49.280 15740-15740/com.adnonstop.activitylifecycler I/MainActivity2: onStart: 2222222222222222222222222
03-30 14:30:49.283 15740-15740/com.adnonstop.activitylifecycler I/MainActivity2: onResume: 22222222222222222222222222
03-30 14:30:49.993 15740-15740/com.adnonstop.activitylifecycler I/MainActivity: onStop: 1111111111111111111111111
重新启动MainActivity
03-30 14:30:50.713 15740-15740/com.adnonstop.activitylifecycler I/MainActivity2: onPause: 22222222222222222222222222
03-30 14:30:50.718 15740-15740/com.adnonstop.activitylifecycler I/MainActivity: onStart: 11111111111111111111111111
03-30 14:30:50.718 15740-15740/com.adnonstop.activitylifecycler I/MainActivity: onResume: 1111111111111111111111
03-30 14:30:51.307 15740-15740/com.adnonstop.activitylifecycler I/MainActivity2: onStop: 2222222222222222222222222
03-30 14:30:51.307 15740-15740/com.adnonstop.activitylifecycler I/MainActivity2: onDestroy: 2222222222222222222222222
-------- 由此可以得出结论
launchmode = SingleTask ,
如果任务栈中已经存在Activity A实例,则当再次启动该Activity A时,在任务栈中处于Activity A上的所有Activity都会被从任务栈里移除并销毁,从而实现Activity A位于的栈顶。
Actiivty A 调用的生命周期方法为 onStart,onResume,并不会调用onCreate方法。
如果要传递Intent参数,必须在Activity A里复写onNewIntent(Intent intent )方法获取Intent和Intent参数。
MainActivity
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "onCreate: 1111111111111111111111");
initView();
}
private void initView() {
Button btnNA = (Button) findViewById(R.id.btn_newac);
btnNA.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, MainActivity2.class));
// finish();
}
});
}
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, "onStart: 11111111111111111111111111");
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "onResume: 1111111111111111111111");
}
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "onPause: 111111111111111111111111");
}
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, "onStop: 1111111111111111111111111");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestroy: 11111111111111111111111");
}
}
MainActivity2
public class MainActivity2 extends AppCompatActivity {
private static final String TAG = MainActivity2.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Log.i(TAG, "onCreate: 2222222222222222222222222");
TextView tvSA = (TextView) findViewById(R.id.tv_startActivity);
tvSA.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity2.this, MainActivity.class));
}
});
}
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, "onStart: 2222222222222222222222222");
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "onResume: 22222222222222222222222222");
}
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "onPause: 22222222222222222222222222");
}
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, "onStop: 2222222222222222222222222");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestroy: 2222222222222222222222222");
}
}
清单文件配置
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MainActivity2"></activity>
</application>