使用“singleTask”作为启动模式时无法完全关闭活动

Posted

技术标签:

【中文标题】使用“singleTask”作为启动模式时无法完全关闭活动【英文标题】:Unable to fully close activity when using "singleTask" as launch mode 【发布时间】:2021-10-30 12:38:17 【问题描述】:

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

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

<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 说堆栈中没有活动,但我仍然在导航中看到它。

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

感谢您的回答,我能够搜索有关“近期场景”的更多信息。我发现的另一个解决方案是将“android:autoRemoveFromRecents="true"" 添加到我的清单中的 SecondActivity

以上是关于使用“singleTask”作为启动模式时无法完全关闭活动的主要内容,如果未能解决你的问题,请参考以下文章

启动Activity时如何忽略“SingleTask”的launcheMode?

android singleTask 活动不作为根?

Android中维护标准应用Activity回栈状态(使用singleTask启动模式)

singleTask 启动模式不起作用

singleTask 的多个活动

activity启动模式之singleTask