8

なぜ、リソースは HEXAdecimal に変換されますか? app のリソースへの高速アクセスが作成されますか?

4

3 に答える 3

8

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 を再構築するたびに変更される可能性があり、変更されることを考えると、コードを維持することを想像してください。

インデックス番号は、メモリ アドレス、オフセット、または特別な種類のチーズではありません。これらは、コンパイラによって生成される単なる定数であり、わかりやすい名前を使用してリソースにアクセスできるようにします。

于 2013-03-02T07:45:55.270 に答える
2

R.java ファイルは、Android リソース マネージャーAndroid アセット マネージャー パッカー (aapt.exe)によって生成され、アプリのすべてのリソースへの参照が含まれています。各参照は一意の ID (public static final int) です。これらの定数は、16 進形式で R.java ファイルに書き込まれます。

于 2013-03-02T05:22:02.527 に答える
-2

これは、Android の観点から見た建築的なものです。Android アプリケーションを開発し、その時点でリソース マネージャーがすべてのリソースに一意のアドレスを割り当てます。アプリケーションがデバイスにインストールされると、実際のメモリ割り当てが行われ、このファイルは Android が必要な実際のメモリをマップするのに役立ちます。

これがあなたの質問に答えることを願っています

于 2013-03-02T05:24:06.320 に答える