Tom*_*ond 1 android android-intent android-activity
我遇到了一些意图的代码,该意图启动了一个新活动,该活动直接包含一个带有int的意图:
intent.setFlags(268435456);
而不是适当的Intent.FLAG_ACTIVITY_NEW_TASK或有什么。
弄清楚此int实际等于什么的最佳方法是什么,以便我们不会通过设置错误的应用程序来破坏应用程序?我想整理一下这段代码。
标志基于设置各个位,因此,您要做的第一件事就是将该值转换为二进制。您可以使用任何允许在十进制和二进制之间进行转换的标准计算器应用程序来执行此操作。在这种情况下:
?0001 0000 0000 0000 0000 0000 0000 0000?
^
Run Code Online (Sandbox Code Playgroud)
只有一位设置为true(从右数第28位)。所有的Intent标志都声明为十六进制值(例如FLAG_ACTIVITY_NEW_TASK = 0x10000000),因此您可能只想将其转换为十六进制并找出匹配的那个。
public static final int FLAG_ACTIVITY_NEW_TASK = 0x10000000;
Run Code Online (Sandbox Code Playgroud)
事实证明,这就是我们在这种情况下要寻找的那个。假设您有一个更复杂的-多个标志的组合:
intent.setFlags(335544320);
Run Code Online (Sandbox Code Playgroud)
再一次,转换为二进制:
?0001 0100 0000 0000 0000 0000 0000 0000?
^ ^
Run Code Online (Sandbox Code Playgroud)
因此,我们在这里有两个标志。将它们分成两个单独的值,每个值仅设置一个标志:
0001 0000 0000 0000 0000 0000 0000 0000
0000 0100 0000 0000 0000 0000 0000 0000
Run Code Online (Sandbox Code Playgroud)
转换为十六进制:
0x10000000
0x04000000
Run Code Online (Sandbox Code Playgroud)
在的源代码中查找Intent,它映射到:
Intent.FLAG_ACTIVITY_NEW_TASK
Intent.FLAG_ACTIVITY_CLEAR_TOP
Run Code Online (Sandbox Code Playgroud)
因此,您的等效替换为:
intent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
442 次 |
| 最近记录: |