[第一个应用程序]我有一个通过广播打开的动画启动画面(活动),可以通过活动本身的按钮或通过其他广播关闭。打开和关闭都很好。但是,每当启动画面处于活动状态(屏幕上)并且我发送广播或单击按钮时,活动就会关闭,但会将我的主(启动器)活动带到前台。如果我按下启动画面上的后退按钮,它将打开我的主要活动。如果我按下主页按钮并通过通知动作发送广播,那么一切正常。
如果我打开我的应用程序(即启动器活动),请按后退按钮,然后发送接收器以打开启动屏幕,然后在关闭时不会打开我的主要活动。这意味着我的启动画面总是在我的应用程序堆栈顶部交付。这种行为是否正常?我想避免这种情况,欢迎任何解决方法。
启动启动画面的代码:
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。 - 对于我的应用来说这是一个严重的问题,因为即使在点击启动画面上的关闭按钮后,如果用户发现自己处于启动器活动状态,他们也可能会试图对应用进行“强制停止”。这对应用程序来说是不好的,因为它高度依赖于系统触发的广播,然后被阻止。
答案 0 :(得分:1)
尽管我问了一个老问题,但我最终通过添加我的启动意图来解决它:
m_intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
根据文件:
如果在传递给Context.startActivity()的Intent中设置,则此标志将为 导致新启动的任务被置于当前主页之上 活动任务(如果有)。也就是说,从任务中退回 即使不是最后一个,也总会将用户返回到家 他们看到的活动。
因为,我的飞溅活动是独立的,即使手机被锁定也应该启动,上面的标志非常适合。一个缺点是该标志仅适用于API 11+(即我的共4个用户不会从中受益:D)。无论如何,这似乎比使用非标准launchMode
要好得多。
答案 1 :(得分:0)
我通过为启动活动设置launchMode="singleInstance"
来解决了这个问题。虽然,我仍然不确定原始问题是否应该存在。如果singleInstance启动模式在其他人的用例中不可用,该怎么办?那么解决方案是什么?