なぜリソースがHEXAdecimalに変換されるのですか?アプリケーションのリソースへの高速アクセスが可能です。なぜ、R.java内のHEXA-DECIMALにリソースが変換されるのですか
答えて
R.javaをANSは、プロジェクト内の各リソースの静的定数を持つクラスファイル以外の何ものでもありません。定数は、効果的にファイルシステムとなるインデックス番号です。したがって、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)です。これらの定数は、R.javaファイルに16進形式で書き込まれます。
うーん...この奇妙な.exeは何ですか? – ElefantPhace
@ElefantPhaceそれについては何も変わっていません。それはAndroidのアセットマネージャパッカーです。 – Simon
ねえダニー。私はあなたを誤って落とした(間違ったクリックを眠る)。私の間違いを訂正できるように、あなたの答えを編集してください(スペースを追加しても)。 – Simon
これはアンドロイドの視点から建築的なものです。あなたがアンドロイドアプリケーションを開発し、その時にコード(デバイス/エミュレータにインストールされていない)をビルドすると、DVMは私たちが設計したリソースにメモリを割り当てます。実際のメモリアドレスが割り当てられており、リソースのサイズに応じて次のメモリアドレスが割り当てられます。そのロジックをコードに入れて同じものにアクセスすると、その場所を直接参照してリソースを取得しようとします。解析や他のものは必要ありません。
・ホープこれはあなたの質問
しかし、あなたはこれについて考えますか?単一ビットのaddressic_action_search = 0x7f020000; ic_launcher = 0x7f020001; 差分を作成するには、1ビットのアドレスで十分です。 – user2125918
私のPC上のコンパイラが私の電話でDVMを使ってこれらの "メモリアドレス"を構築する方法についてのあなたの説明を聞くのを待つことはできません。それは私の携帯電話を接続していないときにも動作するようです!素晴らしい! – Simon
@ user2125918:メモリのもう片方が格納されているアドレスだけがヒープから与えられます。コンパイル時にすべてのものが割り当てられていればアプリケーションサイズは巨大なサイズになります –
- 1. &が& ampに変換されるのはなぜですか?
- 2. JSPがサーブレットに変換されるのはなぜですか?
- 3. R.java変数をURIに変換する
- 4. なぜsqliteが変換されるのですか? To、
- 5. GLSL変換がレンダリングされないのはなぜですか?
- 6. R.javaファイルの内容を変更する
- 7. R.javaファイル - ";"リソース名に空白があると予想されます
- 8. なぜ "const T *"が "operator delete"のtrivially "void *"に変換されるのですか?
- 9. ArrayList項目がJavaのオブジェクトに変換されるのはなぜですか?
- 10. Excelで `= 10 ** - 2`が` = 0.1`に変換されるのはなぜですか?
- 11. Typescriptでパラメータがプロパティに変換されるのはなぜですか?
- 12. なぜ{}が最初にstd :: nullptr_tに変換されるのですか?
- 13. ブラケットが常に%28に変換されるのはなぜですか?
- 14. なぜRubyではシンボルがnilに変換されないのですか?
- 15. 可変長配列が変換されないのはなぜですか?
- 16. boost :: variant - "const char *"が "bool"に変換されるのはなぜですか?
- 17. JSON配列がオブジェクトに変換されるのはなぜですか?
- 18. JSPがHTMLに変換されないのはなぜですか?
- 19. JavaでTimeUnit.convert()が正しく変換されないのはなぜですか?
- 20. Imagemagick変換でループパラメータが考慮されないのはなぜですか?
- 21. Mesosフレームワークにリソースが提供されないのはなぜですか?
- 22. このリソースでエラーメッセージが表示されないのはなぜですか?
- 23. 私のffmpegが.avi形式に変換された後に再生されないのはなぜですか?
- 24. データ変換警告が表示されるのはなぜですか?
- 25. フォームの内容が変更されるのはなぜですか?
- 26. グラデーション内のローカライズされたリソース変数
- 27. シェフ:「include_recipe」ステップのリソースがスキップされるのはなぜですか?
- 28. Android 2.3.3 7インチタブレットでxlargeリソースが使用されるのはなぜですか?
- 29. C#Int64より大きい数値をHexaDecimalに変換します
- 30. 複数のR.javaの冗長リソース参照が原因でDexIndexOverflowExceptionが発生する
これらは何も変換されません。あなたはちょうどそれらを16進数として見ることになります。これは、同じように8進数でも、実際には2進数でもかまいません。 – Simon