为啥在使用 FLAG_ACTIVITY_REORDER_TO_FRONT 时不能禁用更改活动的动画?

Posted

技术标签:

【中文标题】为啥在使用 FLAG_ACTIVITY_REORDER_TO_FRONT 时不能禁用更改活动的动画?【英文标题】:Why can't I disable the animation for changing activities when using FLAG_ACTIVITY_REORDER_TO_FRONT?为什么在使用 FLAG_ACTIVITY_REORDER_TO_FRONT 时不能禁用更改活动的动画? 【发布时间】:2019-05-25 04:08:36 【问题描述】:

在我的游戏中,当用户决定将屏幕从“消息”屏幕切换到“个人资料”屏幕时,我想确保用户可以切换屏幕并能够保持之前的活动。

所以我有这段代码:

Intent intent = new Intent(this, Profile.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivityIfNeeded(intent, 0);
overridePendingTransition(0, 0);

它可以工作,除了它只在第一次从屏幕切换时禁用动画,之后它就不起作用了。它播放动画,我不想那样。

我该如何解决这个问题?

【问题讨论】:

你需要从一个移动到另一个没有动画。 Disable activity slide-in animation when launching new activity?的可能重复 @RumitPatel 我已经查看了对该问题的回复,但没有一个可以解决我的问题。 我很困惑。您正在使用startActivityIfNeeded()。这是startActivityForResult() 的变体。当您启动Activity 并期望它返回结果时,您启动的Activity 需要调用finish() 以便将结果返回给调用Activity。在这种情况下,将永远不会存在Profile 的现有实例,因为之前使用的所有实例都已完成。请编辑您的帖子并解释更多您的架构以及它应该如何工作。还要在帖子中包含您的清单。 【参考方案1】:

您可以按照@DKV 的建议禁用动画。

不是这个

Intent intent = new Intent(this, Profile.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivityIfNeeded(intent, 0);
overridePendingTransition(0, 0);  // remove this line

试试这个

Intent intent = new Intent(this, Profile.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivityIfNeeded(intent, 0);

注意

添加标志

不是

设置标志

【讨论】:

动画仍在运行。动画不仅在第一次切换屏幕时运行。【参考方案2】:

我按照this 的回答让这个工作。

创建一个没有指定动画的样式: <item name="android:windowAnimationStyle">@null</item>

然后将其用作清单中该活动的主题。

【讨论】:

以上是关于为啥在使用 FLAG_ACTIVITY_REORDER_TO_FRONT 时不能禁用更改活动的动画?的主要内容,如果未能解决你的问题,请参考以下文章

为啥有人应该在 git commit 之前使用 git add?或者为啥有人应该使用 git add 呢?

为啥在 TCP 中使用 bind()?为啥它只用在服务器端而不用在客户端?

为啥或为啥不在 C++ 中使用 memset? [关闭]

为啥在 0-1 背包问题中我们使用 INT_MIN 以及为啥 0 不起作用

在 Java 7 ConcurrentHashMap 中,为啥在写的时候需要段锁?为啥我们不能再次使用 Unsafe 来保持非阻塞?

为啥在 hashCode 中使用素数?