当前位置: 首页 > 知识库问答 >
问题:

Android-清除任务标志不适用于PendingEvent

廖招
2023-03-14

我有一个 A 的任务堆栈

我正在这样设置我的吊挂帐篷。有什么明显的问题吗?

final Intent notificationIntent = new Intent(mContext, ActivityA.class);
        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);


        PendingIntent contentIntent = PendingIntent.getActivity(myContext, 0, notificationIntent, 0);

编辑1:

我尝试了这里的建议:清除任务中的所有活动?

notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);

但是我仍然得到相同的结果。我的活动A从我的应用程序任务堆栈中开始,我按回并转到C,然后是B,然后又是A。

我开始认为这在Android中是不可能的,或者在使用待定的意图时是不可能的。

编辑2:这不是需要什么标志的问题。更大的问题是什么可能会出错,这些标志似乎没有任何效果。

共有3个答案

张心水
2023-03-14

您遇到的问题与Android使用您的PendingIntent和所需的Intent.FLAG_ACTIVITY_NEW_TASK创建新任务有关。换句话说,您要使用的标志与在给定任务堆栈的上下文中启动活动有关。PendingIntent通常没有上下文,因此您看到的是为活动A未决意图创建的任务。

以下是对文档的参考:

Android悬挂帐篷

一系列“待定智能”中的第一个必须具有Intent.FLAG_ACTIVITY_NEW_TASK的要求就是问题所在。请注意,使用“getActivities”方法,一系列挂起的意向可以与初始挂起的意向具有相同的上下文。

你是正确的,仅仅使用标志是不可能实现你想要的。您的代码是正确的,要获得您想要的行为,您还需要超越意图标志。

还有许多其他方法,例如使用清单,运行服务,使用静态字段等来尝试管理您感兴趣的内容。除此之外,如果您决定走使用清单的路线,则可以使用TaskStackBuilder来解决您的问题。还有许多其他不涉及标志的解决方案,但您专门询问了有关使用标志的问题。

时衡虑
2023-03-14

我对此有很多问题,并且认为我要疯了,直到我卸载/重新安装了我的应用程序,嘿,很快,代码就像Stack Overflow上的许多帖子一样工作。我正在做以下事情:

Intent i = new Intent(getApplicationContext(), MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

PendingIntent pi = PendingIntent.getActivity(this, 0, i, 0);

并不断获得两个版本的应用程序。在一台设备上卸载并重新启动另一台设备后,对于单个实例,一切现在都按预期运行。希望这对您有所帮助。

许远航
2023-03-14

如果您使用的是解决方案1,则只需从清单中删除launchMode=“singleTask”

1)

 final Intent notificationIntent = new Intent(mContext, ActivityA.class);

 notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);

 PendingIntent contentIntent = PendingIntent.getActivity(myContext, 0, notificationIntent, 0);

2)

       <activity 
       android:name=".ActivityA" 
       android:theme="@style/theme_noActionBar" 
       android:noHistory="true">

3)

<activity android:name=".ActivityA" android:launchMode="singleTop">
 类似资料:
  • 我正在使用Android中新的导航架构组件。我有三个片断,逻辑片断,主片断,解决片断。主机片段是LoginFragment,登录成功时转到MainFragment,在MainFragment中转到SettingFragment,注销转到LoginFragment。

  • 问题内容: 我最近继承了一个大型Java应用程序,其中几乎没有线程安全性。我目前正在做的是让所有线程正确处理被中断,而不是使用非常糟糕的线程。 问题的部分原因是,我不知道在那里清除中断标志的每个方法调用。 目前,我知道以下内容将清除中断标志: 我还想念什么?谢谢 问题答案: 问题的部分原因是,我不知道在那里清除中断标志的每个方法调用。 重要的是要阐明以下方法仅通过调用它们来清除中断标志: 因此,应

  • 问题内容: 我想将android库项目安装到本地Maven存储库。这是 build.gradle : 当我跑步时: 它卡在这里: 因此,我注意到的第一件事是,由于某种奇怪的原因,它正在尝试将其作为APK部署在设备上。 我是在做错什么,还是只是android-library插件与maven插件不兼容? 问题答案: 编辑: 请参阅github页面(https://github.com/dcendent

  • 我使用的Gretty示例来自:https://github.com/gretty-gradle-plugin/gretty-sample在主build.gradle我只修改了存储库URL(使用镜像回购由于代理): 建造。格雷德尔: 您可以看到端口被指定为: httpPort=8011 在子项目部分。当我运行Gradle时 格雷德卢:农场跑步 它报告: 因此,jetty仍在尝试使用默认端口8080。

  • 问题内容: 我有这个代码: 当我滚动我的回收站视图时,出现此错误: 如何处理此错误并获得第一个可见项目的位置? 问题答案: 我用此代码对其进行了测试,并且对我来说效果很好 我使用了回收视图参数。

  • DownloadManager在Android 8.0上不工作。我不知道为什么。有人能帮我吗? 这就是我尝试过的: