错误:Theme.Translucent&FLAG_ACTIVITY_REORDER_TO_FRONT

Cét*_*tia 17 stack transparency android android-intent android-activity

我有半透明主题的活动:

android:theme="@android:style/Theme.Translucent.NoTitleBar"
Run Code Online (Sandbox Code Playgroud)

此问题也可以通过以下主题重现:

<style name="MyTheme" parent="@android:style/Theme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:colorBackground">@null</item>
</style>
Run Code Online (Sandbox Code Playgroud)

此活动在启动时加载并保存在内存中(当我开始此活动时,我将该FLAG_ACTIVITY_REORDER_TO_FRONT标志作为额外标记).

问题:当我开始此活动时(从菜单中),活动没有显示,没有任何反应.但是:如果我删除半透明主题:一切正常,活动就会回到正面.

是的onNewIntent()被调用.

如果我按回半透明活动是下面的那个!但它需要成为顶级.

一个例子是

A(半透明活动)BC

堆栈:A

一个startActivity(B)

堆栈:A,B

B startActivity(C)

堆栈:A,B,C

c startActivity(A)//带有标志FLAG_ACTIVITY_REORDER_TO_FRONT

堆栈应为:B,C,A

但是A永远不会被带到前面,尽管它的onNewIntent()被调用.

有任何想法吗?

旁注


有趣的未回答的问题:http://groups.google.com/group/android-developers/browse_thread/thread/269c67f6b39cfe45?pli = 1


android:launchModesingleTasksingleInstance不希望被使用.这些更改了backstack并将活动移动到自己的堆栈中.因此我们不再有A,B,C了.

singleTask和singleInstance - 不适合大多数应用程序,因为它们会导致用户可能不熟悉的交互模型,并且与大多数其他应用程序非常不同.

http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

想要直观表示launchModes的任何人都可以尝试以下应用:https://play.google.com/store/apps/details? id = com.novoda.demos.activitylaunchmode

Ron*_*nie 0

应该launchMode位于清单文件中您的活动的标签singleTask中。<activity>

来自文档:

singleTask - 如果在启动活动时,已经有一个与该活动一起启动的任务正在运行,则当前任务将被置于前面,而不是启动新实例。现有实例将收到对Activity.onNewIntent()正在启动的新 Intent 的调用,并 Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT设置标志。这是 singleTop 模式的超集,如果已经有一个活动实例在堆栈顶部启动,它将接收那里描述的 Intent(不FLAG_ACTIVITY_BROUGHT_TO_FRONT 设置标志)。

更新

作为更好的解决方法,您可以尝试使整个窗口 inonNewIntent()或 in onResume..

@Override
protected void onNewIntent(Intent intent) {
   super.onNewIntent(intent);
   getWindow().getDecorView().invalidate();
}
Run Code Online (Sandbox Code Playgroud)