【问题标题】:FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS excludes whole application, not only the ActivityFLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 排除整个应用程序,而不仅仅是 Activity
【发布时间】:2011-10-17 20:30:16
【问题描述】:

我有一个启动 Activity 的通知。长按主页按钮并选择我的应用程序后,我想再次启动我的主要活动,而不是通知启动的此活动。我尝试使用 FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS,但这从最近删除了我的整个应用程序,这不是我想要实现的。我怎样才能让我的应用处于最近状态,但主 Activity 已启动?

问候

【问题讨论】:

    标签: android


    【解决方案1】:

    好的,我找到了解决问题的方法。我从FLAG_ACTIVITY_NEW_TASK 的通知开始了一个活动。但在我看来,如果亲和力与默认亲和力不同,这个活动只会在自己的任务中启动。所以我不得不在清单中添加不同的亲和力。

    似乎FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 并没有(如记录的那样)从最近的活动中排除活动,而是排除了活动从最近开始的整个任务(而不是整个应用程序)。由于我没有设置不同的亲和力,我想排除的活动是在同一个任务中启动的(尽管我已经设置了FLAG_ACTIVITY_NEW_TASK),所以我的整个应用程序(因为它只在一个任务中运行)被排除在外最近的。

    现在我为从 Notification 启动的 Activity 设置了不同的关联,并以 FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 启动它。当我离开此 Activity 并长按 HOME 按钮时,我可以选择我的应用程序,默认任务将启动或置于最前面。

    如果我上面提到的有误,请随时纠正...

    【讨论】:

    • 谢谢,这和我遇到的一个问题类似——你是如何改变任务的亲和力的?
    • 对于将来发现此问题的任何人,只需回答我自己的问题:在清单集中android:taskAffinity="com.yourpackage.YourActivity"
    • 如果说按下主页按钮,活动是否会自行销毁?因为现在通知活动永远无法导航回
    【解决方案2】:

    我不清楚你想要什么。

    “我怎么能有我的应用程序在最近,但有主活动 开始了吗?”

    如果您想始终使用长按主页来启动一项活动,您可以在清单中将您的活动定义为singleTask

    这样,当您在长按 HOME 中选择快捷方式时,它将始终显示 MAIN, singleTask 活动。我这样说是因为我曾经使用过这种行为。 ;-)

    我相信通过使用它,您仍然可以正常从通知中启动活动,例如使用Intents。

    在活动标签中:

            android:launchMode="singleTask"
            >
    
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    

    【讨论】:

    • 我想你明白我想要什么,但 launchMode="singleTask" 并没有解决我的问题。当我在长按主页后选择应用程序的快捷方式时,它并不总是显示我的 MAIN,而是显示我使用的最后一个 Activity。
    • 长按主页后,我想开始 Activity SplashScreen ...我删除了 launchMode。
    • 我的意思是你的整个清单。您可以根据需要编辑问题...我这么说是因为如果您阅读此内容:developer.android.com/guide/topics/fundamentals/… 您会看到 singleTask 总是启动一个新任务并被放置在该任务的根目录中。但是,如果它的一个实例已经存在,则意图转到它(onNewIntent)。另外,因为 ActivityManager 使用 FLAG_ACTIVITY_NEW_TASK|FLAG_ACTIVITY_RESET_IF_NEEDED 调用活动(...继续...)
    • (参见stackoverflow.com/questions/2417468/…),顶部堆栈被清除并且singleTask 动作。应该不足为奇,因为 singleTask 活动只能存在一次。所以总而言之,它被放置在前景中。但是,在某些情况下(我不完全理解)代码中的意图过滤器和意图可以改变这种行为。最好发布整个清单以及如何调用您的活动(我的意思是,使用了哪些 Intent 代码)。
    • ... 或者您可以使用通知中的意图在新任务中启动活动(或在清单中为其定义亲和性)。还有其他选择,具体取决于您想要实现的目标。这就是为什么我说我完全不了解你的问题。但当然,我可能是错的......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 2015-08-25
    • 2021-09-07
    • 2023-03-25
    相关资源
    最近更新 更多