【问题标题】:How to close previous activities when activity launch by intent-filter happens?当意图过滤器启动活动时如何关闭以前的活动?
【发布时间】:2015-11-16 22:21:40
【问题描述】:

我有一个 Activity,它通过这个意图过滤器从浏览器启动:

   <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="myapp" />
            <data android:host="someaction"/>
            <data android:path="/" />
        </intent-filter>

但如果我的应用程序的其他活动未销毁,它们将出现在已启动的活动后面。我需要以某种方式使用 CLEAR_TOP 标志,但使用意图过滤器。 Activity的launchMode设置为singleTop 而且我不能使用singleInstance 或singleTask。那么如何只启动我想要的活动而不启动其他活动呢?

【问题讨论】:

    标签: android android-activity activity-stack


    【解决方案1】:

    解决方案 1

    我会尝试一些BroadCast 事件。从您开始的Activity 发送一个,并将BroadcastReceivers 添加到您要关闭的那些。

    查看this answer,我想应该对你有帮助。

    解决方案 2

    我也会尝试一下:将活动的意图标志设置为FLAG_ACTIVITY_CLEAR_TOP。您也可以考虑使用以下意图标志:FLAG_ACTIVITY_CLEAR_TASKFLAG_ACTIVITY_NEW_TASK

    【讨论】:

    • 不错的解决方案,但带有切换活动动画 - 之前的活动在销毁之前一段时间可见
    • 尝试覆盖未决动画:link
    • 我已经更新了我的答案,也许那个标志也可以为你做。
    • 我不能使用 CLEAR_TOP 标志或覆盖挂起的动画,因为我没有明确启动活动,而是使用意图过滤器和用户从浏览器启动我的活动
    • 创建一个仅带有意图过滤器的虚拟活动,它使用 CLEAR_TOP 标志启动您的真实活动。覆盖虚拟和真实之间的未决转换,因此之后不会留下任何可见的痕迹。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    相关资源
    最近更新 更多