好吧,我对Java一无所知,对Android知之甚少。话虽如此,我在几乎所有的清单中都遇到了某个属性或变量。
<android:configChanges="1204">
现在,我知道代码行存在的原因和原因,以及它主要用于什么(屏幕方向、键盘或屏幕大小(,但我想知道数值指的是什么。它会被设置在某个地方吗?或者1204是与属性android:configChanges相关联的已知值吗?如果该值指的是配置状态更改,即屏幕的方向,则意味着它是在某个地方定义的。这将如何用Java编写?更进一步地说,如果它在某个地方被定义,这难道不意味着它可以用于其他方式,而不仅仅是android:configChanges吗?我正在寻找一些关于我的手机发生了什么的答案。
LG Aristo 5 Metro上的Android 10。任何帮助都可以,谢谢!
硬编码数字
我假设您正在查看已编译应用程序的AndroidManifest.xml
。通常在生产代码中,XML标志属性如下所示:
android:configChanges="locale|orientation|screenSize"
1204
是一个十进制值。有趣的是,我刚刚在应用程序的APK中打开了同一个文件,configChanges
是一个十六进制值。它由0x
前缀表示,例如1204
dec将是0x4b4
十六进制。为了完整起见,我还会提到二进制数——它们将在下面的例子中使用。
现在这超出了我的知识范围,但我猜差异可能在AAPT2版本之间,也可能由R8或ProGuard等额外的代码优化器应用。
CCD_ 7与位屏蔽
是1204与属性相关联的已知值。
有点。它是configChanges
标志的可能组合之一。它们是已知的,只有很多。
例如,看看这对常数(或者任何其他的常数对,你可以在这些文件中找到(:
attrs_manifest.xml
的configChanges
属性中的locale
标志android.content.pm.ActivityInfo.CONFIG_LOCALE
这些值表示configChanges
中的一个位,它本身就是一个位掩码。这意味着只有configChanges
的值,您就可以检查所有这些标志中的哪些是启用的,哪些是禁用的。
正在检查启用的标志
我们可以使用BitwiseCmd等在线工具对这些值执行逐位操作。
例如,我们可以对1204
和locale
标志执行AND操作:
1204 & 0x0004
0000010010110100 // 1204 (configChanges bit mask)
& 0000000000000100 // 0x0004 (locale bit)
= 0000000000000100 // 4
这意味着在1204
中,locale
标志已启用,并且当系统区域设置(语言(更改时,不会重新创建Activity
。简单来说,Activity
表示屏幕上的一个窗口。
让我们检查uiMode
标志的对比度:
1204 & 0x0200
0000010010110100 // 1204 (configChanges bit mask)
& 0000001000000000 // 0x0200 (uiMode bit)
= 0000000000000000 // 0
这意味着在1204
中,uiMode
标志被禁用,并且每当UI模式(白天/晚上(发生变化时,Activity
将被重新创建。
下面是一个关于如何在Java中检查这些标志的示例。
我正在寻找一些关于我的手机发生了什么的答案。
你遇到了什么问题吗?还是这只是纯粹的好奇?