我在清单中将启动模式设置为singleTop
。但是,如果通过startActivity
一个接一个地调用此活动多次,则仍会创建多个实例。
以下是演示该行为的代码。 MainActivity显示单个按钮,单击时会启动SingleTopActivity
两次。 SingleTopActivity
显示从MainActivity
收到的消息。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button startActivity = (Button) findViewById(R.id.startActivity);
startActivity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startSingleTopActivity("first");
startSingleTopActivity("second");
}
});
}
private void startSingleTopActivity(@NonNull String message) {
Intent intent = new Intent(this, SingleTopActivity.class);
intent.putExtra(SingleTopActivity.EXTRA_MESSAGE, message);
startActivity(intent);
}
}
public class SingleTopActivity extends AppCompatActivity {
public static final String EXTRA_MESSAGE = "MESSAGE";
private TextView mMessage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_single_top);
getSupportActionBar().setTitle("SingleTopActivity");
mMessage = (TextView) findViewById(R.id.message);
mMessage.setText(getIntent().getStringExtra(EXTRA_MESSAGE));
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
String message = intent.getStringExtra(EXTRA_MESSAGE);
mMessage.setText(mMessage.getText() + " " + message);
}
}
如果没有其他意图标志,则SingleTopActivity
会显示second
消息。当导航SingleTopActivity
时会显示first
消息,而不是MainActivity
。
但是,如果在调试器中启动(因此由于断点等原因,启动活动需要更长的时间),或者设置FLAG_ACTIVITY_REORDER_TO_FRONT
或FLAG_ACTIVITY_CLEAR_TOP
等标志时,只启动SingleTopActivity
的一个实例正如所料。
为什么singleTop
在这种情况下无法正常工作?
答案 0 :(得分:3)
正如this page所述,如果活动设置为singletop
,则仅当活动位于任务的顶部时,才会再次创建活动。
在您的代码中,当您致电startSingleTopActivity("second");
时,任务的最高活动为MainActivity
而不是SingleTopActivity
,因此会创建两次。