使用 "singleTask" 作为启动模式时无法完全关闭 activity

Unable to fully close activity when using "singleTask" as launch mode

我正在尝试创建一个单独的 activity 并使用它来接收来自其他应用程序的数据。此 SecondaryActivity 是通过清单中的 intent.action.SENDandroid.intent.action.SEND_MULTIPLE 启动的。我还将其设置为使用 launchMode="singleTask" 来避免重复的应用程序问题(如果您继续在 android 共享 sheet 中选择该应用程序并单击返回,您可以启动该应用程序的多个实例).

launchMode="singleTask 到目前为止似乎可以工作,但即使在 onBackPressed() 中添加 finish()finishAffinity() 我也无法关闭它。当我查看后台堆栈时,它说 SecondaryActivity 已关闭,但按下导航按钮后,我仍然可以看到 activity.

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/Theme.TestProject">
    <activity
        android:name=".MainActivity"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".SecondaryActivity"
        android:launchMode="singleTask"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <action android:name="android.intent.action.SEND_MULTIPLE" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="*/*" />
        </intent-filter>
    </activity>
</application>

我的 SecondActivity 看起来像这样

class SecondaryActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_secondary)
    }
    override fun onBackPressed() {
        finish()
        finishAffinity()
    }
}

当应用程序完全关闭并通过共享文件启动时会出现此问题。我无法让 SecondaryActivity 不显示在导航屏幕中,即使在按下后退按钮将其关闭后也是如此。 adb 说堆栈中没有活动,但我仍然在导航中看到它。

这称为 Recents 屏幕,它是一个系统级 UI,列出最近访问的活动和任务 即使应用程序已完成。

如果您不想在按下后退按钮后在最近的应用中看到该应用,请使用finishAndRemoveTask

override fun onBackPressed() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        finishAndRemoveTask()
    } else {
        finish()
    }
}