、私は次の文を見つけた:XML駆動型のGUIとパフォーマンス
あなたのUIの説明には、変更することなく、それを変更したり、適応させることができることを意味し、アプリケーションコード、外部にありますあなたのソースコードを再コンパイルしてください。
私はXMLレイアウトとリソースの多くの利点について知っていますが、XMLファイルはAPK内に配置されているため、再パッケージせずにGUIを変更する方法はありません。私たちのほとんどはeclipse ADT PluginとANTを使ってアプリケーションをパッケージ化しているので、クラスファイルをコンパイルしても実際の利得はありません(リソースファイルを変更した後、開発者はアプリケーションを再パッケージして新しいAPKファイル)。このため、APK全体を再デプロイせずにデバイス上のGUIだけを再デプロイする方法はありません。
この仮定が真であれば、XMLファイルはAPKファイルの存続期間中に同じになるでしょう。私は、これらのファイル(特にレイアウトのもの)は、(Swingのように)GUIをプログラムで構築するよりも効率的ではない、実行時に(アクティビティのonCreateの前に)解析および処理する必要があると思います。レイアウトは通常ボトルネックではありませんが、私が正しいとすれば、ここでは、(アニメーションなどで)よりよく使用できる時間の小さな無駄があります。同じページを読む
、それは述べて:
アプリケーションをコンパイルすると、各XMLレイアウトファイルが表示リソースにコンパイルされます。私のAPKのいずれかを点検
、私はclasses.dex
内でプリコンパイルされたファイルを探してきたし、私のJavaクラスとR.class
ファイルが、何もありません。レイアウトXMLファイルは/res/layout folder
の中にあり、resources.arsc
という名前のファイルが他のリソース(文字列、アイコン名)に関する情報を含んでいるようですが、Viewsには何も関係しません。
私の質問:
- は、XMLレイアウトファイルがどのファイルにプリコンパイル、およびされていますか?
- そうでない場合は、読み込み時間を短縮するためにレイアウト情報をファイルに完全にプリコンパイルするためのコンパイルオプションがありますか? (理想的には、これはクラスファイルになります)
- もしそうでなければ、最初の実行時にそのファイルを作成し、それをアプリケーションインストールフォルダにキャッシュする方法があります。そのため、後続の実行時実行では、 XMLとロード時間が速い?
ありがとうございます。
リンクありがとうございます。私はR $ layout.classがあることを確認することができますが、私のアプリでは 'int' IDしか保持しません。 –
Ok、apk内のXMLファイルを調べると、XMLではなく前処理されたファイルであることがわかります。私は、これらの形式では、レイアウトのinflatterによって行われた実行時の解析がかなり高速であると思います。 –
私は自分自身のAPKの1つを見ましたが、レイアウトファイルはソースファイルと同じパスを持つAPK内にありますが、バイナリ形式にコンパイルされています。 (編集:ninja'd!) – slyfox