在我的应用程序中有一个别名活动:MyActivity
并MyAliasActivity
在清单中注册。别名的目的是提供额外的意图过滤器。用户可以在运行时启用/禁用此功能。活动和别名有singleTop
修饰符。
但是,如果我在禁用组件的情况下启动我的应用程序(MyActivity
在顶部),然后我启用它,并广播与意图过滤器匹配的事件,MyActivity
再创建一次(通过别名) - 我有两个不想要的 backstack。
他能以任何方式处理吗?我只需要在后台进行一项活动。
在我的应用程序中有一个别名活动:MyActivity
并MyAliasActivity
在清单中注册。别名的目的是提供额外的意图过滤器。用户可以在运行时启用/禁用此功能。活动和别名有singleTop
修饰符。
但是,如果我在禁用组件的情况下启动我的应用程序(MyActivity
在顶部),然后我启用它,并广播与意图过滤器匹配的事件,MyActivity
再创建一次(通过别名) - 我有两个不想要的 backstack。
他能以任何方式处理吗?我只需要在后台进行一项活动。
您应该使用singleTask
而不是singleTop
. singleTask
将保证您在 backStack 中只有一个 Activity 实例。如果您第二次使用singleTask
launchMode 启动 Activity,onNewIntent
则会运行该 Activity 而不是创建新的 Activity。另一种解决方案是使用singleInstance
,这与 几乎相同singleTask
,只保留一个 Activity 实例并onNewIntent
在它已经创建的情况下运行。
有关更多信息,这里很好地解释了它的工作原理:
https://inthecheesefactory.com/blog/understand-android-activity-launchmode/en
谷歌参考:
https://developer.android.com/guide/topics/manifest/activity-element.html