Java 在android中,竖条(“|”)是什么意思?
例如:Java 在android中,竖条(“|”)是什么意思?,java,android,wakelock,powermanager,Java,Android,Wakelock,Powermanager,例如: WakeLock wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK| PowerManager.ACQUIRE_CAUSES_WAKEUP|PowerManager.ON_AFTER_RELEASE, "Alarm"); Options.OPTION1 = 1; Options.OPTION2 = 2; Options.OPTION3 = 4; Options.OPTION4 = 8; “|
WakeLock wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK|
PowerManager.ACQUIRE_CAUSES_WAKEUP|PowerManager.ON_AFTER_RELEASE, "Alarm");
Options.OPTION1 = 1;
Options.OPTION2 = 2;
Options.OPTION3 = 4;
Options.OPTION4 = 8;
“|”字符是什么意思
有关此问题的更多详细信息:
我这样问是因为当我只使用PowerManager.AQUIRE_来实例化wakelock时,程序停止工作,而当我使用上面的方法时,它工作得很好
我想知道这是不是因为程序忽略了ACQUIRE_CAUSES_WAKEUP标记,结果没有被使用。是位or,它超越了Android。它通常用于将多个选项填充到一个参数中 因此,fX | Y | Z形式的函数意味着函数应该使用选项X、Y和Z。当然,X、Y和Z应该适当编码,以确保|将保留其值 按位包含或=>| 按位包含或|运算符对两个操作数的每对并行位执行按位包含或运算。在每一对中,如果第一位或第二位为1或两者均为1,则结果为1。否则结果为0。让我们看看使用包含式操作的表格。 让我们了解使用真值表的包含或运算:
(OR)
A B Result
0 0 0
1 0 1
0 1 1
1 1 1
如果你看一看你所展示的例子中最常与|一起使用的常数,它们的值是2的幂。例如:
WakeLock wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK|
PowerManager.ACQUIRE_CAUSES_WAKEUP|PowerManager.ON_AFTER_RELEASE, "Alarm");
Options.OPTION1 = 1;
Options.OPTION2 = 2;
Options.OPTION3 = 4;
Options.OPTION4 = 8;
在二进制注释中,为了便于阅读,我省略了0b前缀:
Options.OPTION1 = 0001;
Options.OPTION2 = 0010;
Options.OPTION3 = 0100;
Options.OPTION4 = 1000;
如果选择或Options.OPTION1和Options.OPTION3,则结果为0101
Options.OPTION1 | Options.OPTION3 => 0101
这使您能够将多个值打包为一个值,因为每个选项组合都是唯一的
通过对选项进行AND运算,可以从压缩值中提取选项:
packedValue = Options.OPTION1 | Options.OPTION3;
packedValue & Options.OPTION3 => true;
packedValue & Options.OPTION4 => false;
自
及
通常,该符号是按位OR。它在Android之外的许多不同语言和环境中使用
它的用途是:
X | Y:如果X或Y为1,则结果为1
在您的特定情况下,它用于创建位字段。请务必查看Android power manager代码库
此API的可能标志为:
PARTIAL_WAKE_LOCK = 0x01
SCREEN_DIM_WAKE_LOCK = 0x06
SCREEN_BRIGHT_WAKE_LOCK = 0x0a
FULL_WAKE_LOCK = 0x1a
这些是相互排斥的,您只能选择一个,但您可以选择其他标志:
ON_AFTER_RELEASE = 0x20000000
ACQUIRE_CAUSES_WAKEUP = 0x10000000
因此,一旦代码运行,它就会将这些标志合并在一起,从而导致:
0x20000000
| 0x10000000
| 0x0000001a
---------------
0x3000001a
我这样问是因为当我仅用PowerManager.AQUIRE_原因_WAKEUP实例化wakelock时,程序停止工作
这是因为您必须选择唤醒锁定部分、屏幕暗、屏幕亮或全的级别之一,您尝试仅使用一个可选的唤醒锁定标志运行