1

我有一个带有 MainActivity 和 SecondaryActivity 的应用程序。当 MainActivity 打开 SecondaryActivity 时,我需要用户从 MainActivity 中的列表中选择电话号码。我曾经用instartActivityForResult重新打开 MainActivity,以便 MainActivity 直接打开带有特定列表的片段,如下所示:extraintent

Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("UserInfo", userInfo);
intent.putExtra("SecondaryActivity", true);
startActivityForResult(intent, RESULT_FROM_MAIN_ACTIVITY);

当用户单击该列表的一个元素时,我设置结果并完成 MainActivity 以返回 SecondaryActivity,如下所示:

Intent returnIntent = new Intent();
returnIntent.putExtra(PHONE_NUMBER, phoneNumber);
setResult(Activity.RESULT_OK, returnIntent);
finish();

到目前为止效果很好,但我注意到在 Android 11 设备中,我有两个问题:

  1. startActivityForResult直接在onResume()函数中启动 MainActivity 而不通过onCreate()函数,对于 Android 10 及以下设备。这迫使我在每次onResume()调用 MainActivity 的函数时检查是否有任何extra发送。对已经收费的 MainActivity 不必要地增加额外费用的东西。
  2. 我无法使用finish()! 取而代之的是,该应用程序只是关闭了。

我尝试使用新的 Activity Result API,更具体地说:registerForActivityResult,像这样(在 SecondaryActivity 中):

private ActivityResultLauncher<Intent> activityResultLauncher;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // ...
    activityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
        result -> {
            manageResult(result.getResultCode(), result.getData());
        });
}

public void onPhoneNumberClick() {
    Intent intent = new Intent(this, MainActivity.class);
    intent.putExtra("UserInfo", userInfo);
    intent.putExtra("SecondaryActivity", true);
    activityResultLauncher.launch(intent);
}

但是,这并没有改变我描述的两个问题:onResume()在 MainActivity 中直接调用并finish()关闭应用程序,而不是关闭 MainActivity 并返回 SecondaryActivity。startActivityForResult我知道,当我使用或registerForActivityResult时MainActivity 已经打开的事实launch可能是导致这些问题的原因,但是我能做些什么来解决它们呢?

编辑: 我的 MainActivity 被定义为singleTaskAndroidManifestAndroid 11 中似乎发生了一些变化,用于管理这样定义的活动。如果我删除此标签,它可以解决问题,但我不确定为什么我们将此活动定义为singleTask,我不希望看到任何旨在解决的错误...

4

0 回答 0