XML中的ID是否导致资源文件生成器在Android中声明实例?

XML中的ID是否导致资源文件生成器在Android中声明实例?,android,xml,android-layout,Android,Xml,Android Layout,我们在android中使用XML格式的布局文件时,通常会声明我们希望在代码中引用的视图/控件的ID或XML格式的任何其他位置。我想知道Andriod在后端的具体表现 XML中提到的ID是否会导致资源文件生成器声明 对象的实例,以便我们可以使用 或者它只是声明实例,即使我们没有提到ID 因此,让我在这里解释一下背景中真正发生的事情 我们有一个标准的HashMap,它有一个键和一个值 哈希映射的工作方式是从用于映射的键中生成哈希值 例如,如果strings.xml包含 <string nam

我们在android中使用XML格式的布局文件时,通常会声明我们希望在代码中引用的视图/控件的ID或XML格式的任何其他位置。我想知道Andriod在后端的具体表现

  • XML中提到的ID是否会导致资源文件生成器声明 对象的实例,以便我们可以使用
  • 或者它只是声明实例,即使我们没有提到ID

    • 因此,让我在这里解释一下背景中真正发生的事情

      我们有一个标准的HashMap,它有一个键和一个值 哈希映射的工作方式是从用于映射的键中生成哈希值

      例如,如果strings.xml包含

      <string name="app_name">Hello, Android</string>
      
      你好,安卓 “app_name”是一个键,使用一些散列函数对其进行散列,并使用该位置存储字符串“Hello,Android”——这是普通Java HashMap的工作方式

      让我们再看一遍

      当你说map.get(“app_name”);散列函数以这种方式调用generatehash(“app_name”),该值用于计算值的位置(Hello,Android)

      因此,每次我们从这个HashMap中检索一个值时,我们最终都会调用这个generatehash()函数——虽然这是O(1),但仍然需要一些处理。为了提高这一点的效率并降低计算能力(移动设备在设计时会考虑非常低的内存足迹)此generatehash()函数仅在编译时调用

      这就是想法-因此哈希值是在编译时计算的,并放在这个名为R.java的文件中。。。因此,在运行时,我们有一个键与散列值的一对一映射,该散列值直接用于查找实际资源:)

      所以记住这一点,资源在某个特定的位置“内存中”是可用的,就像HashMap一样,该位置是使用R.java中的hash值计算的


      希望它能回答您的问题。

      那么它只是在哈希中使用名称-值对吗?换句话说,R.java的内容是编译时而不是运行时哈希的结果。