【问题标题】:Other activity is also brought to front on StartActivity其他活动也在 StartActivity 上显示在前面
【发布时间】:2014-08-20 13:11:30
【问题描述】:

我的应用中有两个 Activity(AB)和一些 BroadcastReceiver

我遇到以下情况:

A 正在运行并使用主页按钮关闭(调用了 onStop)。

一段时间后,BroadcastReceiver 被出于某种意图触发。它运行以下代码:

            Intent activityIntent = new Intent(context,
                    B.class);
            activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                    | Intent.FLAG_ACTIVITY_CLEAR_TOP);

            context.startActivity(activityIntent);

B确实开始了,但是A也被带到了前面(在B后面)。我怎样才能避免 A 被放在前面?

【问题讨论】:

  • 你可以在活动A的onPause()回调上调用finish()。

标签: android android-intent android-activity broadcastreceiver start-activity


【解决方案1】:

当您按下主页按钮时,您实际上并没有关闭应用程序(我的意思是它处于暂停状态)并且它处于后台堆栈中,每当您启动同一个应用程序的新活动并关闭该活动时,它都会弹出顶部活动回栈..所以如果你不需要这件事发生那么请尝试下面的代码

@Override
public void onStop() {
    if(!isFinishing())
       finish(); 
    super.onStop();
}

【讨论】:

  • 谢谢,这个解决方案有效。但是,用户不希望在此时完成 A,如果可能,我宁愿避免它。
【解决方案2】:

您可以从 BoardcastReceiver 使用此意图过滤器启动 Activity B。这将清除 Activity 堆栈并从堆栈中弹出 Activity A。

Intent intent = new Intent(context,B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
context.startActivity(intent);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    相关资源
    最近更新 更多