Итак, позвольте мне объяснить, что на самом деле происходит в фоновом режиме.
У нас есть стандартная HashMap, которая имеет ключ и значение. Способ, которым работает хэш-карта, заключается в генерации хеш-значения из ключа.который используется для картирования.
Так, например, если strings.xml содержит
<string name="app_name">Hello, Android</string>
"app_name" - это ключ, который хэшируется с использованием некоторой хеш-функции и с использованием этого местоположения: String "Hello,Android "сохраняется - как обычно работает Java HashMap.
Итак, давайте повторим это снова
Когда вы говорите map.get (" app_name ");хеш-функция называется следующим образом. generatehash ("имя_приложения"), и это значение используется для вычисления позиции значения (Hello, Android)
Так что каждый раз, когда мы получаем значение из этого HashMap,в конечном итоге мы вызываем эту функцию generatehash () - хотя это O (1), это все еще некоторая обработка.Чтобы сделать это немного более эффективным и тратить меньше вычислительной мощности (мобильные устройства спроектированы с учетом очень низкого объема памяти) - эта функция generatehash () вызывается только во время компиляции
В этом и заключается идея - поэтому хеш-значения вычисляются во время компиляции и помещаются в этот файл с именем R.java ... Итак, во время выполнения мы имеем однозначное сопоставление ключа с хеш-кодом.значение и это хеш-значение непосредственно используется при поиске фактического ресурса:)
Таким образом, помня об этом, ресурсы доступны «в памяти» в каком-то конкретном месте - как HashMap, и это местовычисляется с использованием хеш-значения, которое присутствует в R.java
Надеюсь, что оно отвечает на ваш вопрос.