-------- 情景重现
MainActivity的启动模式设置为singleTask
<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"
android:launchMode="standard"></activity>
MainActivity打开MainActivity2 ; MainActivity2再打开MainActivity , 并用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: 111111111");
initView();
}
@Override
protected void onNewIntent(Intent intent) {//在onStart之前被调用
super.onNewIntent(intent);
Log.i(TAG, "onNewIntent: 111111111 intent param = " + intent.getStringExtra("key"));
}
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, "onStart: 11111111111111111 intent param = " + getIntent().getStringExtra("key"));
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "onResume: 11111111111");
}
private void initView() {
TextView tvFinish = (TextView) findViewById(R.id.tv_finish);
tvFinish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(getApplicationContext(), MainActivity2.class));
}
});
}}
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_main);
Log.i(TAG, "onCreate: 22222222");
initView();
}
private void initView() {
TextView tvFinish = (TextView) findViewById(R.id.tv_finish);
tvFinish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.putExtra("key", "value");
startActivity(intent);
}
});
}
结果 :
03-26 15:39:22.661 25903-25903/com.qingmu.onsaveinstancestate I/MainActivity: onNewIntent: 111111111 intent param = value
03-26 15:39:22.661 25903-25903/com.qingmu.onsaveinstancestate I/MainActivity: onStart: 11111111111111111 intent param = null
在MainActivity的onStart方法里getIntent并没有获取到MainActivity2传递的intent值;
而在MainActivity的onNewIntent里获取到MainActivity2传递的Intent值。
--------- 由此问题得到结果,在onNewIntent方法里获取Intent值,并且onNewIntent在onStart之前被调用。
-------- 当MainActivity的启动模式设置为standard时,onNewIntent未被调用。这一点要注意。