Angenommen, in einer Apk haben wir 1000 Strings in strings.xml.
Wenn wir diese App dann auf dem Gerät ausführen, sind alle Zeichenfolgen immer im Heapspeicher verfügbar. Oder sie werden in den Speicher geladen, wenn wir getString()
Methode von Context aufrufen, um die Strings zu laden.
Sind alle Zeichenfolgen zur Laufzeit im Heap?
Das ist eine großartige Frage. Wir können versuchen, die Antwort zu finden, indem wir den Android-Quellcode studieren.
Alle Aufrufe von getString()
werden an den folgende Methode in android.content.res.AssetManager
:
loadResourceValue
ist eine native Funktion und kann in android_util_AssetManager.cpp gefunden werden
Die native Methode ruft getResource()
innerhalb der Klasse ResTable
hier
Der Konstruktor für ResTable
ruft addInternal()
hier auf Das liest die Ressourcen für jede Paket-ID in der App. Diese Tabelle wird später zur Suche von Ressourcen verwendet.
Um Ihre Frage zu beantworten, werden ja alle Zeichenfolgen (und tatsächlich alle Ressourcen) vom Dateisystem analysiert und in eine Nachschlagetabelle im nativen Heap geladen.