关闭Receiver触发的启动画面(活动)会在关闭后打开主要活动

时间:2015-02-04 19:29:44

标签: android android-intent android-activity

[第一个应用程序]我有一个通过广播打开的动画启动画面(活动),可以通过活动本身的按钮或通过其他广播关闭。打开和关闭都很好。但是,每当启动画面处于活动状态(屏幕上)并且我发送广播或单击按钮时,活动就会关闭,但会将我的主(启动器)活动带到前台。如果我按下启动画面上的后退按钮,它将打开我的主要活动。如果我按下主页按钮并通过通知动作发送广播,那么一切正常。

如果我打开我的应用程序(即启动器活动),请按后退按钮,然后发送接收器以打开启动屏幕,然后在关闭时不会打开我的主要活动。这意味着我的启动画面总是在我的应用程序堆栈顶部交付。这种行为是否正常?我想避免这种情况,欢迎任何解决方法。

启动启动画面的代码:

private void showSplashScreen() {
    Intent m_intent = new Intent(this, SafSplashActivity.class);
    m_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    m_intent.putExtra("theme", theme);
    context.startActivity(m_intent);
}

更新1: 如果我在我的启动活动中使用System.exit(0)代替finish(0),那么我的主要活动不是将我的主要活动带到前台,而是从头开始(并最终进入前景)... < / p>

P.S。 - 对于我的应用来说这是一个严重的问题,因为即使在点击启动画面上的关闭按钮后,如果用户发现自己处于启动器活动状态,他们也可能会试图对应用进行“强制停止”。这对应用程序来说是不好的,因为它高度依赖于系统触发的广播,然后被阻止。

2 个答案:

答案 0 :(得分:1)

尽管我问了一个老问题,但我最终通过添加我的启动意图来解决它:

m_intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);

根据文件:

  

如果在传递给Context.startActivity()的Intent中设置,则此标志将为   导致新启动的任务被置于当前主页之上   活动任务(如果有)。也就是说,从任务中退回   即使不是最后一个,也总会将用户返回到家   他们看到的活动。

因为,我的飞溅活动是独立的,即使手机被锁定也应该启动,上面的标志非常适合。一个缺点是该标志仅适用于API 11+(即我的共4个用户不会从中受益:D)。无论如何,这似乎比使用非标准launchMode要好得多。

答案 1 :(得分:0)

我通过为启动活动设置launchMode="singleInstance"来解决了这个问题。虽然,我仍然不确定原始问题是否应该存在。如果singleInstance启动模式在其他人的用例中不可用,该怎么办?那么解决方案是什么?