为什么有时会多次创建SingleTop活动

时间:2015-10-28 13:41:07

标签: android

我在清单中将启动模式设置为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_FRONTFLAG_ACTIVITY_CLEAR_TOP等标志时,只启动SingleTopActivity的一个实例正如所料。

为什么singleTop在这种情况下无法正常工作?

1 个答案:

答案 0 :(得分:3)

正如this page所述,如果活动设置为singletop,则仅当活动位于任务的顶部时,才会再次创建活动。 在您的代码中,当您致电startSingleTopActivity("second");时,任务的最高活动为MainActivity而不是SingleTopActivity,因此会创建两次。