对话活动还会在后台恢复其他活动

时间:2012-07-27 09:39:49

标签: android android-activity

这就是场景。我的应用程序中有2个活动,当我单击应用程序创建的通知时,会启动Dialog活动。 问题是当我点击通知时,只有对话框应该显示,而不是我的应用程序的其他活动,如果它在按下主页按钮时停止。

当我按下后退按钮关闭我的应用程序时,对话框活动会显示对话框,但当应用程序在后台运行时,该活动也会在创建对话活动时打开。

我使用@android:style/Theme.Dialog进行对话活动。

如何仅显示Dialog活动,而不显示背景中的其他活动?

3 个答案:

答案 0 :(得分:2)

OP问题的解决方案是在Manifest中为该活动设置不同的Task关联。

<activity android:name="MyIndependentActivity"
android:theme="@android:style/Theme.Dialog" 
android:taskAffinity="a_unique_id">

taskAffinity字符串必须与包名称不同(com.whatever.myapp)

我还使用android:excludeFromRecents =“true”来隐藏最近的应用列表中的对话框,因为回到对话框通常没有意义。

更多信息:http://developer.android.com/guide/components/tasks-and-back-stack.html#Affinities

答案 1 :(得分:0)

是的,那将会发生。

当您声明Dialog的主题时,它会影响活动生命周期,之前的活动不会进入onStop,因此一些Android功能仍然认为它是活动活动,技术上是正确的,因为您的对话框Activity就像一个对话框。 / p>

如果您不“关心”可以看到对话框后面的上一个活动,那么可能的解决方法是将对话框更改为DialogFragment,将对话框的主题放在片段上并在其自己的活动中显示那就行了。

答案 2 :(得分:0)

我这样做的方式(这不是最好的方法)是在activity.onPause()和activity.onResume()方法中有一些逻辑,它们将根据什么执行操作我想要。我的经验更多地围绕着不同的活动,并且在它们之间进行转换,而不是使用对话框。

您可以通过setResult()在活动之间传递信息。这将使您能够确定儿童活动决定关闭的原因。结合onResume函数应该可以禁用父活动。

要覆盖对话框以便在其后面看不到其他活动,可能会使用onPause()方法使其变为半透明。

我发现onStop()非常不合理使用,而且经常没必要。其原因在于,从开发人员的角度来看,它是不可预测的,因为onStop可以根据操作系统是否有足够的内存等而在奇怪的时间调用onPause然而,根据我的经验总是可预测的。