android - 为什么,android中的资源在R.java中被转换为HEXA-DECIMAL

标签 android r.java-file

<分区>

为什么,资源被转换成 HEXAdecimal,它是否为应用程序创建了对您的资源的一些快速访问。

最佳答案

R.java 只不过是一个类文件,它为项目中的每个资源提供一个静态常量。该常量是有效文件系统的索引号。因此 myicon.png 的文件编号为 12345。资源管理器使用此索引在运行时加载资源。打开它。看一看。

让我们看一个示例 R.java:

public final class R {
    public static final class id {
        public static final int myTextView=0x7f090008;
    } 
}

我可以使用以下方式引用 myTextview:

findViewById(R.id.myTextView) - constant
findViewById(0x7f090008) - hex
findViewById(2131296264) - decimal
findViewById(017702200010) - octal
findViewById(0b1111111000010010000000000001000) - binary

它们都是等价的。

同样,我可以像这样编写我的 R.java 文件:

public final class R {
    public static final class id {
        public static final int myTextView=0b1111111000010010000000000001000;
    } 
}

它仍然有效。

没有什么是“转换”的,您只是使用常量来引用索引号。编译器会处理它。您只是碰巧将其视为十六进制,但最终,就像您应用中的所有内容一样,它只是 1 和 0。

这样做的唯一原因是您可以使用常量。想象一下,如果您必须使用实际的索引值来维护您的代码,尤其是考虑到它们可能并且会在您每次重建 R.java 时发生变化。

索引号不是内存地址,也不是偏移量,也不是一种特殊的奶酪。它们只是由编译器生成的常量,使您能够使用人类友好的名称访问资源。

关于android - 为什么,android中的资源在R.java中被转换为HEXA-DECIMAL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15171028/

相关文章:

c# - C#(ASP.NET)通过套接字与Android通信

java - Android 应用程序中的 Gradle 自定义库

Android 房间持久库 - 如何更改数据库版本

android - 在 Eclipse 中为 Android 开发 : R. java 未重新生成

java - Android 向上按钮不起作用

java - Android JSON API解析

java - android中出现NullPointerException的原因是什么?

android - 如何在 Android Studio 上准备闭源 SDK 模块?

java - 读取文件后生成事件

android - 在类中使用 getString()