Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在android中,竖条(“|”)是什么意思?_Java_Android_Wakelock_Powermanager - Fatal编程技术网

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时,程序停止工作

这是因为您必须选择唤醒锁定部分、屏幕暗、屏幕亮或全的级别之一,您尝试仅使用一个可选的唤醒锁定标志运行