【问题标题】:How to send app to background after finishing activity which is started from push notification完成从推送通知开始的活动后如何将应用程序发送到后台
【发布时间】:2019-07-06 04:19:58
【问题描述】:

我有一个活动,如果应用收到推送通知,就会调用它。活动以FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_CLEAR_TOP 开始。活动,我们称之为“A”,显示 UI 并在一段时间后完成。在这一点上,活动堆栈有问题。

场景:

  1. 应用程序在后台运行另一个活动“B”
  2. 然后应用收到推送通知并启动Activity A。
  3. 相关事情完成后,应用完成Activity A
  4. 然后返回到 Activity B 并停留在前台,即使应用在收到推送通知之前处于后台。

经过调试,发现系统在完成Activity A后调用了Activity B的onResume方法。
如果应用程序从后台启动,我怎样才能让应用程序保持在后台?我应该更改活动 A 的意图标志吗?

【问题讨论】:

  • 不这么认为。我不是在寻找获取主页键或通过其他意图发送应用背景。
  • 好吧,我不确定它是否会起作用,因为我从未尝试过,但是您是否尝试过更改为 FLAG_NEW_TASK 和 FLAG_CLEAR_TASK?第一个将活动创建为新任务(即使您在后台已经有另一个活动堆栈),第二个销毁前一个堆栈。
  • 你试过intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
  • @RicardoCosteira 添加 FLAG_CLEAR_TASK 标志会将应用程序发送到后台,但问题是应用程序在点击最近的应用程序屏幕后无法继续应用程序的最近活动。完成活动 A 并从最近的应用屏幕恢复应用后,应用会显示初始屏幕。

标签: android android-intent intentfilter back-stack activity-stack


【解决方案1】:

在您的情况下,您可以通过两种方式实现这一目标

1- 来自带有活动标签android:noHistory="true" 的清单文件

2- 当您盯着下面的活动集标志时来自代码

Intent mIntent = new Intent(context, Youractivity.class); 
mIntent.setFlags(mIntent.getFlags() | Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(mIntent);

欲了解更多信息,请查看developers link

您可以做的另一件事是使用this.finishAffinity(); 代替notificationActivity 中的this.finish()。这将关闭应用程序而不是进入前台。

【讨论】:

  • 它也不起作用,因为我已经完成了推送通知后引发的活动。
猜你喜欢
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-30
  • 2016-06-03
  • 2018-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多