繁体   English   中英

关闭接收器触发的初始屏幕(活动),关闭后将打开主要活动

[英]Closing Receiver triggered splash screen (activity) opens main activity after closing

[第一个应用]我有一个特定的动画启动画面(活动),可以通过广播打开它,可以通过活动本身上的按钮或通过另一个广播来关闭它。 打开和关闭都工作正常。 但是,每当启动屏幕处于活动状态(在屏幕上)并且我播放广播或单击按钮时,该活动便会关闭,但会将我的主要(启动器)活动置于前台。 如果我在启动屏幕上按返回按钮,它将打开我的主要活动。 如果我按下主页按钮并通过通知动作发送广播,则一切正常。

如果我打开我的应用程序(即启动器活动),请按“后退”按钮,然后交付接收器以打开启动屏幕,然后在关闭时它不会打开我的主要活动。 这意味着我的启动屏幕始终位于应用程序堆栈的顶部。 这是正常现象吗? 我想避免这种情况,因此欢迎任何解决方法。

启动启动屏幕的代码:

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) ,则我的主要活动不是从头开始(而是最终进入了前景),而不是将我的主要活动带到了前台。 ..

PS-这对我的应用程序来说是一个严重的问题,因为即使在用户单击启动屏幕上的启动按钮后,即使在单击启动屏幕上的关闭按钮后,他们仍可能会试图对应用程序进行“强制停止”操作。 这对应用程序不利,因为它高度依赖于系统触发的广播,然后该广播将被阻止。

尽管我曾问过这是一个老问题,但最终还是通过添加到我的启动意图中解决了它:

m_intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);

根据文档:

如果在传递给Context.startActivity()的Intent中进行设置,则此标志将导致新启动的任务放置在当前家庭活动任务的顶部(如果有)。 也就是说,从任务上按一下将始终使用户返回家中,即使这不是他们最后看到的活动。

因为,我的启动活动是一个独立的活动,即使在手机被锁定的情况下也应该启动,因此上述标记非常合适。 缺点是该标志只能在API 11+上使用(即,我的4个用户将无法从中受益:D)。 无论如何,这似乎比使用非标准的launchMode

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM