我找到了一些关于启动包含int意图的新活动意图的代码:
intent.setFlags(268435456);
而不是适当的Intent.FLAG_ACTIVITY_NEW_TASK
或其他。
有什么最好的方法可以确定这个int实际上等于什么,这样我们就不会通过设置错误的int来破坏应用程序了吗?我想稍微整理一下这段代码。
我找到了一些关于启动包含int意图的新活动意图的代码:
intent.setFlags(268435456);
而不是适当的Intent.FLAG_ACTIVITY_NEW_TASK
或其他。
有什么最好的方法可以确定这个int实际上等于什么,这样我们就不会通过设置错误的int来破坏应用程序了吗?我想稍微整理一下这段代码。
标志基于设置个别位,因此您想要做的第一件事是将该值转换为二进制。您可以使用任何允许您在十进制和二进制之间进行转换的标准计算器应用程序来完成此操作。在这种情况下:
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);
Intent
类是最好的方法。我现在可以看到,此值与FLAG_ACTIVITY_NEW_TASK
和FLAG_RECEIVER_FOREGROUND
相映射。 - ADM