为什么,资源被转换为HEXAdecimal,它是否为应用程序创建了一些对资源的快速访问。
答案 0 :(得分:8)
R.java只不过是一个类文件,它为项目中的每个资源都有一个静态常量。常量是有效文件系统的索引号。因此,myicon.png的文件号为12345.资源管理器使用此索引在运行时加载资源。打开它。看一看。
让我们看一个示例R.java:
public final class R {
public static final class id {
public static final int myTextView=0x7f090008;
}
}
我可以使用:
来引用myTextviewfindViewById(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时都会改变。
索引号不是内存地址,偏移量或特殊类型的奶酪。它们只是由编译器生成的常量,使您能够使用人性化的名称访问资源。
答案 1 :(得分:2)
R.java文件由Android资源管理器 Android资产管理器打包程序(aapt.exe)生成,并包含对您应用的所有资源的引用。每个引用都是唯一的id(public static final int)。这些常量以十六进制格式写入R.java文件。
答案 2 :(得分:-2)
从Android的角度来看,这是一种架构。当您开发Android应用程序并且当时构建代码(未安装在设备/模拟器上)时,资源管理器会将唯一地址分配给所有资源。一旦在设备上安装了应用程序,就会发生实际的内存分配,这个文件将帮助Android映射它所需的实际内存。
希望这能回答你的问题