なぜ、リソースは HEXAdecimal に変換されますか? app のリソースへの高速アクセスが作成されますか?
3 に答える
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;
}
}
それはまだ動作します。
何も「変換」されません。定数を使用してインデックス番号を参照しているだけです。コンパイラがそれを処理します。たまたま 16 進数として表示されているだけですが、最終的には、アプリ内のすべてのものと同様に、1 と 0 になります。
これを行う唯一の理由は、定数を使用できるようにするためです。実際のインデックス値を使用する必要がある場合、特に R.java を再構築するたびに変更される可能性があり、変更されることを考えると、コードを維持することを想像してください。
インデックス番号は、メモリ アドレス、オフセット、または特別な種類のチーズではありません。これらは、コンパイラによって生成される単なる定数であり、わかりやすい名前を使用してリソースにアクセスできるようにします。
R.java ファイルは、Android リソース マネージャーAndroid アセット マネージャー パッカー (aapt.exe)によって生成され、アプリのすべてのリソースへの参照が含まれています。各参照は一意の ID (public static final int) です。これらの定数は、16 進形式で R.java ファイルに書き込まれます。
これは、Android の観点から見た建築的なものです。Android アプリケーションを開発し、その時点でリソース マネージャーがすべてのリソースに一意のアドレスを割り当てます。アプリケーションがデバイスにインストールされると、実際のメモリ割り当てが行われ、このファイルは Android が必要な実際のメモリをマップするのに役立ちます。
これがあなたの質問に答えることを願っています