2012-01-06 16 views
7

、私は次の文を見つけた: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とロード時間が速い?

ありがとうございます。

答えて

8

あなたはLayoutInflaterのクラスのドキュメントでチラッを持っている場合、あなたは彼らが言うに気づくでしょう:パフォーマンス上の理由から

、ビューインフレがビルド時に実行されるXMLファイルの前処理に大きく依存しています。したがって、現時点では、LayoutInflaterXmlPullParserをプレーンXMLファイルに使用することはできません。コンパイルされたリソース(R.something file)から返されたXmlPullParserでのみ動作します。)

はそうです、レイアウトファイルは確かに、ある程度プリコンパイルと、上記の抜粋から判断、)それはR$layout.class出力ファイルになります(しかし、私はその上の100%わからないんだけどさ。コンパイル済みのレイアウトファイルは、コンパイル済みのAPKパッケージに/res/layout/<layout_id>.xmlという名前で格納されています。ほとんどのプレーンテキストのXML要素がバイナリ形式にマップされているテキストエディタでそのファイルを展開して開くと、気付くでしょう。

おそらく、AndroidManifest.xmlのAPKにパッケージ化されたファイルには、同じ種類の圧縮があります。

+0

リンクありがとうございます。私はR $ layout.classがあることを確認することができますが、私のアプリでは 'int' IDしか保持しません。 –

+0

Ok、apk内のXMLファイルを調べると、XMLではなく前処理されたファイルであることがわかります。私は、これらの形式では、レイアウトのinflatterによって行われた実行時の解析がかなり高速であると思います。 –

+0

私は自分自身のAPKの1つを見ましたが、レイアウトファイルはソースファイルと同じパスを持つAPK内にありますが、バイナリ形式にコンパイルされています。 (編集:ninja'd!) – slyfox

関連する問題