正确干净地使用 onNewIntent() 和 setIntent()

Using correctly and cleanly onNewIntent() with setIntent()

我有 3 个活动(A、B、C),其中 2 个与意图进行交流。 这是调用顺序:A -> B -> C。 在activityB中,我用intent.putExtra("key", gameMode)启动activityC。 activityC 第一次启动时没有问题。但是如果 C 结束并且我回到 B 并更改 game_mode,activity C 总是读取第一个意图。 我知道这个问题会被问很多次,但即使我尝试使用 onNewIntent()(内部使用 setIntent(intent)),甚至使用 FLAG_ACTIVITY_CLEAR_TOP,它也不会改变任何东西...... 我想(我敢肯定...)我是做错事的人,但我正在寻求您的帮助以获得完整而明确的答案。 目标是更新意图(或至少它的附加功能)。我应该调用 onNewIntent() 方法,还是 Android 自己调用?等等

非常感谢花时间回答我问题的人。

B activity :

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
}

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(MenuPrincipal.this, GameCard.class);
        intent.putExtra("key", gameMode);
        onNewIntent(intent);
        startActivity(intent);
    }
});

C activity :

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.some_layout);
    int gameMode;
    Bundle extras = getIntent().getExtras();
    if(extras != null) {
        gameMode = extras.getInt("key", 0);
    }
}

@Override
public void onBackPressed() {
    // do nothing.
    //default value : super.onBackPressed();
}

感谢 Ajay K S 找到了答案: 通过使用 extras.getInt("key"),应用程序可以完美运行(您可以毫无问题地阅读最后一个 - 而不仅仅是第一个 - 意图)。 还有,经过测试,不需要自己调用onNewIntent(intent)方法来更新intent。似乎 Android 自己做了这个。 再次感谢!