Kapan saya harus menggunakan aset yang bertentangan dengan sumber daya mentah di Android?

151

Saya berada di tengah-tengah studi Android saya, dan saya baru saja membahas aset dan sumber daya mentah. Saya mencoba memahami alasan untuk menggunakan sumber daya mentah vs. Aset.

  1. Keduanya menyediakan aliran input sumber daya yang tidak dikompilasi.

  2. Tampaknya Aset memberikan lebih banyak fleksibilitas dan fungsionalitas daripada sumber daya Raw.

    Sebuah. Anda dapat membuat struktur folder di bawah assetstetapi tidak di bawahraw

    b. Anda dapat membuat daftar semua sumber daya secara dinamis di assetsfolder tetapi tidak di rawfolder.

Jadi, mengapa saya menggunakan sumber daya mentah di Android?

Mortalus
sumber
Kemungkinan rangkap dari Perbedaan antara direktori / res dan / asset
rds

Jawaban:

182

Perbedaan utama antara rawfolder dan assetsfolder.

  • Karena raw adalah subfolder dari Resources (res), Android akan secara otomatis menghasilkan IDfile apa pun yang berada di dalamnya. Ini IDkemudian disimpan di R classyang akan bertindak sebagai referensi ke file, yang berarti dapat dengan mudah diakses dari kelas dan metode Android lainnya dan bahkan dalam file Android XML. Menggunakan ID yang dibuat secara otomatis adalah cara tercepat untuk memiliki akses ke file di Android.

  • The assetsfolder adalah “lampiran” direktori. Kelas R tidak menghasilkan ID untuk file yang ditempatkan di sana, yang kurang kompatibel dengan beberapa kelas dan metode Android. Akses file dalam assetsfolder lebih lambat karena Anda harus mengaturnya berdasarkan String . Namun beberapa operasi lebih mudah dilakukan dengan menempatkan file di folder ini, seperti menyalin file database ke memori sistem. Tidak ada cara (mudah) untuk membuat referensi Android XML ke file di dalam folder Aset.

pengguna370305
sumber
4
@ user370305 Hai, apakah batasan 1MB masih ada untuk OS Android baru sekarang? Saya tidak dapat menemukan dokumentasi yang membicarakan hal ini. Apakah Anda tahu di mana saya dapat menemukannya?
GMsoF
6
@ GMsoF - Tidak ada dokumen khusus untuk ini. Tapi saya punya beberapa tautan bermanfaat untuk Anda. 1. blog.rossgreenhalf.com/2010/12/13/android-file-size-limits 2. stackoverflow.com/questions/11276112/... 3. stackoverflow.com/questions/6809651/… 4. elinux.org/Android_aapt dan 5. android-developers.blogspot.in/2012/03/... Cukup lakukan per sr no.
user370305
2
@ GMsoF - Ada banyak trik untuk meletakkan ukuran file lebih besar dari 1 mb di /assetdirektori.
user370305
10
saya tidak pernah memiliki batasan ukuran file untuk folder aset. apakah kamu yakin ada hal seperti itu?
Android developer
2
Ya, sebelum Android 2.2 atau 2.3, file aset terkompresi dengan ukuran lebih dari 1 MB tidak dapat dikompresi dari APK. Yang disebutkan di sini groups.google.com/forum/#!topic/android-developers/lguGFJD-JRs
user370305
33

Dari dokumentasi Android , raw/direktori digunakan untuk:

File sewenang-wenang untuk disimpan dalam bentuk mentah. Untuk membuka sumber daya ini dengan InputStream mentah , hubungi Resources.openRawResource () dengan ID sumber daya, yaitu R.raw.filename .

Namun, jika Anda memerlukan akses ke nama file asli dan hierarki file, Anda dapat mempertimbangkan untuk menyimpan beberapa sumber daya dalam assets/direktori (bukan res / raw /) . File dalam aset / tidak diberikan ID sumber daya, sehingga Anda dapat membacanya hanya menggunakan AssetManager .


Dalam satu baris, file-file dalam raw/direktori tidak dikompilasi oleh platform , diberi ID sumber daya dan tidak dapat dikelompokkan ke dalam sub-folder sedangkan jika Anda ingin assets/direktori gunakan sebaliknya .

Pangeran
sumber
1
Apakah file mentah merupakan pilihan terbaik jika Anda ingin menyalin file besar ke folder penyimpanan?
live-love
@ 40-Love Tidak ada batasan ukuran file untuk Android 2.3 dan lebih tinggi kecuali Anda mendukung versi sebelumnya. Anda dapat memilih folder penyimpanan apa pun tergantung pada kebutuhan Anda. Perbedaan utama adalah cara file-file ini diakses.
Pangeran
1

Menambah jawaban yang diberikan di atas ...

/ res / string, / res / tata letak, / res / file xml dll semua akan dikompilasi ke dalam format biner. Tetapi jika Anda menempatkan file, termasuk file XML, di direktori / res / raw / sebagai gantinya, mereka tidak bisa dikompilasi ke dalam format biner.

Satu keuntungan besar menggunakan aset dibandingkan sumber daya mentah adalah awalan file:///android_asset/ Uri. Ini berguna untuk memuat aset ke dalam WebView. Misalnya, untuk mengakses aset yang terletak di aset / foo / index.html dalam proyek Anda, Anda dapat memanggil loadUrl("file:///android_asset/foo/index.html")pemuatan HTML itu ke dalam WebView.

Shubhamhackz
sumber
Anda bisa menggunakan file:///android_res/awalan untuk menunjuk ke sumber daya mentah.
Androidguy