web-dev-qa-db-ja.com

Androidの生のリソースではなく、アセットを使用する必要があるのはいつですか?

私はAndroidの世界での研究の真っin中にいるので、AssetsとRawリソースについて説明しました。RawリソースとAssetsを使用する理由を理解しようとしています。

  1. どちらも未コンパイルのリソース入力ストリームを提供します。

  2. アセットは、Rawリソースよりもはるかに高い柔軟性と機能を提供するようです。

    a。 RawではなくAssetsの下にフォルダ構造を作成できます

    b。 Rawフォルダーではなく、アセットフォルダーにすべてのリソースを動的にリストできます。

では、なぜAndroidでRawリソースを使用するのですか?

140
Mortalus

rawフォルダーとAssetsフォルダーの主な違い。

  • RawはResources(res)のサブフォルダーであるため、Androidは、その中にあるファイルに対してIDを自動的に生成します。このIDは、 R classこれはファイルへの参照として機能します。つまり、他のAndroidクラスおよびメソッドから、そしてAndroid XMLファイルでも使用できます。自動生成されたIDは、Androidのファイルにアクセスするための最速の方法です。

  • Assetsフォルダーは“ appendix”ディレクトリーです。 RクラスはIDを生成しませんそこに置かれたファイルに対して、そのため一部のAndroidクラスおよびメソッドとの互換性が低くなります。また、内部のファイルへのアクセスが非常に遅くなります。 Stringに基づいてハンドルを取得する必要があるため。ただし、一部の操作は、データベースファイルをシステムのメモリにコピーするなど、このフォルダーにファイルを配置することでより簡単に実行できます。 (簡単な)アセットフォルダー内のファイルへのAndroid XML参照を作成する方法。

173
user370305

Androidドキュメント から、raw/ディレクトリは次の目的で使用されます。

生の形式で保存する任意のファイル。生のInputStreamでこれらのリソースを開くには、リソースIDでResources.openRawResource()を呼び出します。 R.raw.filename

ただし、元のファイル名とファイル階層にアクセスする必要がある場合は、assets/ディレクトリ(res/raw /の代わりに)assets /内のファイルにはリソースIDが与えられていないため、AssetManagerを使用した場合にのみそれらを読み取ることができます。


1行では、raw/ディレクトリ内のファイルは platformによってコンパイルされませんはリソースIDに割り当てられますおよびはサブフォルダにグループ化できません必要に応じてassets/ディレクトリを使用します。

26
Prince

上記の回答に追加...

/ res/strings、/ res/layout、/ res/xmlファイルなどはすべてバイナリ形式にコンパイルされます。しかし、XMLファイルを含むファイルを/ res/raw /ディレクトリに配置する場合は、代わりに ' tはバイナリ形式にコンパイルされます。

生のリソースよりもアセットを使用する大きな利点の1つは、_file:///Android_asset/_ Uriプレフィックスです。これは、 WebViewへのアセット。たとえば、プロジェクト内のasset/foo/index.htmlにあるアセットにアクセスするには、loadUrl("file:///Android_asset/foo/index.html")を呼び出して、そのHTMLをWebViewにロードします。

0
Shubham Soni