使用 "singleTask" 作为启动模式时无法完全关闭 activity
Unable to fully close activity when using "singleTask" as launch mode
我正在尝试创建一个单独的 activity 并使用它来接收来自其他应用程序的数据。此 SecondaryActivity 是通过清单中的 intent.action.SEND
和 android.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()
}
}
我正在尝试创建一个单独的 activity 并使用它来接收来自其他应用程序的数据。此 SecondaryActivity 是通过清单中的 intent.action.SEND
和 android.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()
}
}