属性 android:configChanges 及其可接受的值



好吧,我对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前缀表示,例如1204dec将是0x4b4十六进制。为了完整起见,我还会提到二进制数——它们将在下面的例子中使用。

现在这超出了我的知识范围,但我猜差异可能在AAPT2版本之间,也可能由R8或ProGuard等额外的代码优化器应用。

CCD_ 7与位屏蔽

是1204与属性相关联的已知值。

有点。它是configChanges标志的可能组合之一。它们是已知的,只有很多

例如,看看这对常数(或者任何其他的常数对,你可以在这些文件中找到(:

  1. attrs_manifest.xmlconfigChanges属性中的locale标志
  2. android.content.pm.ActivityInfo.CONFIG_LOCALE

这些值表示configChanges中的一个位,它本身就是一个位掩码。这意味着只有configChanges的值,您就可以检查所有这些标志中的哪些是启用的,哪些是禁用的。

正在检查启用的标志

我们可以使用BitwiseCmd等在线工具对这些值执行逐位操作。

例如,我们可以对1204locale标志执行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中检查这些标志的示例。


我正在寻找一些关于我的手机发生了什么的答案。

你遇到了什么问题吗?还是这只是纯粹的好奇?

相关内容

最新更新