android intent setFlags问题

时间:2018-09-18 15:36:39

标签: android android-intent android-activity

我遇到了一个意图的代码,该意图启动了一个新活动,该活动直接包含一个带有int的意图: intent.setFlags(268435456);

代替适当的Intent.FLAG_ACTIVITY_NEW_TASK或具有Ya的内容。

弄清楚此int实际等于什么的最佳方法是什么,以使我们不会通过设置错误的应用程序来破坏应用程序?我想整理一下这段代码。

1 个答案:

答案 0 :(得分:6)

标志基于设置各个位,因此,您要做的第一件事就是将该值转换为二进制。您可以使用任何允许在十进制和二进制之间进行转换的标准计算器应用程序来执行此操作。在这种情况下:

‭0001 0000 0000 0000 0000 0000 0000 0000‬
   ^

只有一位设置为true(从右数第28位)。所有Intent标志都声明为十六进制值(例如FLAG_ACTIVITY_NEW_TASK = 0x10000000),因此您可能只想将其转换为十六进制并找出匹配的那个。

public static final int FLAG_ACTIVITY_NEW_TASK = 0x10000000;

事实证明,这就是我们在这种情况下要寻找的那个。假设您有一个更复杂的-多个标志的组合:

intent.setFlags(335544320);

再次,转换为二进制:

‭0001 0100 0000 0000 0000 0000 0000 0000‬
   ^  ^

所以我们在这里有两个标志。将它们分成两个单独的值,每个值仅设置一个标志:

0001 0000 0000 0000 0000 0000 0000 0000
0000 0100 0000 0000 0000 0000 0000 0000

转换为十六进制:

0x10000000
0x04000000

Intent的源中查找,它映射到:

Intent.FLAG_ACTIVITY_NEW_TASK
Intent.FLAG_ACTIVITY_CLEAR_TOP

因此,您的等效替换项将是:

intent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP);