เมื่อใดที่ฉันควรใช้เนื้อหาแทนทรัพยากรดิบใน Android


153

ฉันอยู่ระหว่างการศึกษาเกี่ยวกับ Android และเพิ่งพูดถึง Assets and Raw Resources ฉันพยายามเข้าใจเหตุผลของการใช้ทรัพยากรดิบเทียบกับสินทรัพย์

  1. ทั้งสองมีสตรีมอินพุตทรัพยากรที่ไม่มีการคอมไพล์

  2. ดูเหมือนว่า Assets จะให้ความยืดหยุ่นและการทำงานมากกว่าทรัพยากรดิบ

    ก. คุณสามารถสร้างโครงสร้างโฟลเดอร์ภายใต้assetsแต่ไม่สามารถสร้างได้raw

    ข. คุณสามารถแสดงรายการทรัพยากรทั้งหมดแบบไดนามิกในassetsโฟลเดอร์ แต่จะไม่อยู่ในrawโฟลเดอร์

เหตุใดฉันจึงต้องใช้ทรัพยากรดิบใน Android


คำตอบ:


184

ความแตกต่างหลักระหว่างrawโฟลเดอร์และassetsโฟลเดอร์

  • เนื่องจาก raw เป็นโฟลเดอร์ย่อยของทรัพยากร (res) Android จะสร้างIDไฟล์สำหรับไฟล์ใด ๆ ที่อยู่ภายในโดยอัตโนมัติ นี้ IDจะถูกเก็บไว้จากนั้นในการR classที่จะทำหน้าที่เป็นข้อมูลอ้างอิงไปยังแฟ้มซึ่งหมายความว่ามันสามารถเข้าถึงได้ง่ายจากชั้นเรียนอื่น ๆ Android และวิธีการและแม้กระทั่งในไฟล์ XML Android การใช้ ID ที่สร้างขึ้นโดยอัตโนมัติเป็นวิธีที่เร็วที่สุดในการเข้าถึงไฟล์ใน Android

  • assetsโฟลเดอร์เป็น“ภาคผนวก”ไดเรกทอรี R ชั้นไม่ได้สร้างรหัสสำหรับไฟล์ที่อยู่ที่นั่นซึ่งน้อยที่เข้ากันได้กับการเรียนของ Android บางและวิธีการ การเข้าถึงไฟล์ในassetsโฟลเดอร์จะช้าเนื่องจากคุณจะต้องได้รับการจัดการกับมันอยู่บนพื้นฐานของสตริง อย่างไรก็ตามการดำเนินการบางอย่างทำได้ง่ายกว่าโดยการวางไฟล์ในโฟลเดอร์นี้เช่นการคัดลอกไฟล์ฐานข้อมูลไปยังหน่วยความจำของระบบ ไม่มีวิธีใด (ง่าย ๆ ) ในการสร้างการอ้างอิง XML ของ Android ไปยังไฟล์ภายในโฟลเดอร์ Assets


4
@ user370305 สวัสดีตอนนี้ข้อ จำกัด 1MB สำหรับ Android OS ใหม่หรือไม่ ฉันไม่พบเอกสารใด ๆ ที่พูดถึงเรื่องนี้ คุณมีความคิดว่าจะหาได้จากที่ไหน?
Sam YC

6
@GMsoF - ไม่มีเอกสารเฉพาะสำหรับเรื่องนี้ แต่ฉันมีลิงค์ที่เป็นประโยชน์สำหรับคุณ 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และ 5. android-developers.blogspot.in/2012/03/…เพียงแค่ผ่าน sr no.
user370305

2
@GMsoF - มีเทคนิคมากมายในการใส่ขนาดไฟล์ที่ใหญ่กว่า 1 mb ใน/assetไดเร็กทอรี
user370305

10
ฉันไม่เคยมีข้อ จำกัด เรื่องขนาดไฟล์สำหรับโฟลเดอร์ assets แน่ใจหรือว่ามีสิ่งนั้น
นักพัฒนา Android

2
ใช่ก่อน Android 2.2 หรือ 2.3 ไฟล์เนื้อหาบีบอัดใด ๆ ที่มีขนาดไม่บีบอัดเกิน 1 MB จะไม่สามารถอ่านจาก APK ได้ ซึ่งกล่าวถึงที่นี่groups.google.com/forum/#!topic/android-developers/lguGFJD-JRs
user370305

35

จากเอกสารของ Androidที่raw/ไดเรกทอรีที่ใช้สำหรับ:

ไฟล์โดยพลการเพื่อบันทึกในรูปแบบดิบ เพื่อเปิดทรัพยากรเหล่านี้ด้วยดิบInputStreamโทรResources.openRawResource ()ที่มี ID ทรัพยากรซึ่งเป็นR.raw.filename

แต่ถ้าคุณต้องการเข้าถึงชื่อไฟล์ต้นฉบับและลำดับชั้นของไฟล์คุณอาจพิจารณาประหยัดทรัพยากรบางอย่างในassets/ไดเรกทอรี(แทนความละเอียด / / สด) ไฟล์ในเนื้อหา /ไม่ได้รับ ID ทรัพยากรดังนั้นคุณสามารถอ่านได้โดยใช้AssetManagerเท่านั้น


ในหนึ่งบรรทัดไฟล์ในที่raw/ไดเรกทอรีจะไม่ได้รวบรวมโดยแพลตฟอร์ม , ได้รับมอบหมาย ID ทรัพยากรและไม่สามารถแบ่งออกได้เป็นโฟลเดอร์ย่อยในขณะที่ถ้าคุณต้องการอย่างอื่นใช้assets/ไดเรกทอรี


1
ไฟล์ดิบเป็นตัวเลือกที่ดีที่สุดหรือไม่หากคุณต้องการคัดลอกไฟล์ขนาดใหญ่ไปยังโฟลเดอร์จัดเก็บ
live-love

@ 40-Love ไม่มีข้อ จำกัด เรื่องขนาดไฟล์สำหรับ Android 2.3 ขึ้นไปเว้นแต่คุณจะรองรับเวอร์ชันก่อนหน้า คุณสามารถเลือกโฟลเดอร์เก็บข้อมูลใดก็ได้ขึ้นอยู่กับความต้องการของคุณ ความแตกต่างที่สำคัญคือวิธีการเข้าถึงไฟล์เหล่านี้
เจ้าชาย

1

กำลังเพิ่มคำตอบที่ให้ไว้ข้างต้น ...

/ res / strings, / res / layout, / res / xml files ฯลฯ ทั้งหมดจะถูกคอมไพล์เป็นรูปแบบไบนารี แต่ถ้าคุณวางไฟล์รวมถึงไฟล์ XML ในไดเร็กทอรี / res / raw / แทนไฟล์เหล่านั้นจะไม่ถูกคอมไพล์เป็นรูปแบบไบนารี

ข้อดีอย่างหนึ่งของการใช้สินทรัพย์เหนือทรัพยากรดิบคือ คำนำหน้าfile:///android_asset/ Uriสิ่งนี้มีประโยชน์สำหรับการโหลดเนื้อหาลงใน WebView ตัวอย่างเช่นในการเข้าถึงเนื้อหาที่อยู่ใน assets / foo / index.html ภายในโปรเจ็กต์ของคุณคุณสามารถเรียกการ loadUrl("file:///android_asset/foo/index.html")โหลด HTML นั้นลงใน WebView


คุณสามารถใช้file:///android_res/คำนำหน้าเพื่อชี้ไปที่ทรัพยากรดิบ
androidguy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.