ส่วน "Enums หลีกเลี่ยงการที่คุณจะ Ints ต้องการ" ถูกลบออกจากอย่างเป็นทางการเอกสารนักพัฒนา (ดูเหตุใด Android จึงไม่ใช้ enums มากกว่านี้สำหรับเนื้อหาส่วนเก่า)
ทำไม? มีการเปลี่ยนแปลงใน Android VM ที่ทำให้ทิปล้าสมัยหรือไม่?
ส่วน "Enums หลีกเลี่ยงการที่คุณจะ Ints ต้องการ" ถูกลบออกจากอย่างเป็นทางการเอกสารนักพัฒนา (ดูเหตุใด Android จึงไม่ใช้ enums มากกว่านี้สำหรับเนื้อหาส่วนเก่า)
ทำไม? มีการเปลี่ยนแปลงใน Android VM ที่ทำให้ทิปล้าสมัยหรือไม่?
คำตอบ:
เอกสารต้นฉบับฉบับนั้นเป็นอคติอย่างมาก มีการเขียนใหม่เพื่อให้มีข้อมูลสำรองตามเกณฑ์มาตรฐานจริงเท่านั้นและได้รับการอัปเดตเมื่อมีการอัปเดต VM คุณสามารถหามาตรฐานต่างๆ - รวมทั้งบางส่วนของมาตรฐานที่เราใช้เพื่อเพิ่มประสิทธิภาพห้องสมุดหลัก - ที่http://code.google.com/p/dalvik/
เดา:
ดังนั้นสำหรับความต้องการที่ค่อนข้างธรรมดาของแอพ GUI ประโยชน์จากการพัฒนาของ enums นั้นมีมากกว่าค่าใช้จ่ายพิเศษ
Elliott Hughes เสนอรายละเอียดเพิ่มเติมเกี่ยวกับการเขียนเอกสารใหม่ในบล็อกของเขา: http://elliotth.blogspot.com/2010/09/java-benchmarks.html
โพสต์ในช่วงครึ่งหลังของโพสต์อธิบายว่าทุกการเรียกร้องในเอกสารประสิทธิภาพได้รับการสำรองด้วยมาตรฐาน เห็นได้ชัดว่าเอกสารก่อนหน้านี้มีการอ้างสิทธิ์ที่ยังไม่ผ่านการตรวจสอบเช่น "หลีกเลี่ยงการใช้เงินเนื่องจากมีราคาแพงเกินไป"
คำตอบในปี 2011 จาก Elliot Hugues กล่าวว่าเหตุผลดั้งเดิมที่จะหลีกเลี่ยง enum นั้นคือเหตุผลด้านประสิทธิภาพ ... เช่นเดียวกับ "ประสิทธิภาพการประมวลผล" เนื่องจากเหตุผลนี้ไม่ได้รับการสนับสนุนโดยข้อเท็จจริงจึงถูกลบออกจากเอกสารราชการ
ถูกเพิ่มในภายหลังเนื่องจาก enums เพิ่มข้อมูลในหน่วยความจำมากกว่าการใช้จำนวนเต็ม
IntDef
คำอธิบายประกอบซึ่งอนุญาตให้ใช้ค่าคงที่ int อย่างปลอดภัยพร้อมกับข้อผิดพลาดและการเตือนของ Android Studio blog.shamanland.com/2016/02/int-string-enum.html
TLDR: Dalvik ไม่ดีกับการจัดสรรหน่วยความจำและใช้หน่วยความจำมากกว่าEnum
int
Android Lollipop แทนที่ Dalvik ด้วย ART ซึ่งไม่ได้รับผลกระทบจากข้อ จำกัด เดียวกัน ดังนั้นคำแนะนำนี้จึงไม่เกี่ยวข้องอีกต่อไป
คำตอบที่ยาว:
ว้าว! 8 ปี 5 คำตอบและความคิดเห็นมากมายต่อมาเหตุผลที่แท้จริงยังไม่ได้รับการแก้ไข
ในยุคก่อนอมยิ้ม Android Dalvik เป็นกระบวนการที่ VM ใช้ เนื่องจากมีหน่วยความจำขนาดเล็กสำหรับแอปพลิเคชันที่ใช้ในช่วงเวลานั้น Dalvik จึงมีข้อ จำกัด ด้านหน่วยความจำมากมาย สำหรับการจัดสรรหน่วยความจำ Dalvik ต้องเดินไปที่กองและหาพื้นที่ กองก็จะได้รับการแยกส่วนเมื่อเวลาผ่านไป Dalvik ไม่สามารถจัดเรียงข้อมูลได้ดังนั้นจึงจะจัดสรรเมื่อเวลาผ่านไปและในที่สุดพื้นที่ก็จะหมด
หลีกเลี่ยง Enums ที่คุณต้องการเพียง Ints
มาจาก Dalvik วันเพราะมีEnum
ขนาดใหญ่กว่าint
และการจัดสรรหน่วยความจำมีราคาแพงมาก
กรอไปข้างหน้าวันนี้ Dalvik ถูกแทนที่ด้วย ART ART ออกมาใน KitKat และเป็นค่าเริ่มต้นตั้งแต่ Lollipop
ART ถูกสร้างขึ้นจากพื้นฐานไม่ได้เพิ่มประสิทธิภาพสำหรับหน่วยความจำ แต่เพื่อเพิ่มประสิทธิภาพการทำงาน นอกจากนี้ยังเหมาะสำหรับการจัดสรรและการรวบรวม เหตุผลก็คือมีหน่วยความจำตั้งไว้สำหรับวัตถุขนาดใหญ่ แทนที่จะใส่ทุกอย่างไว้ในกองเดียวกันแล้วต้องหาที่ว่างสำหรับวัตถุขนาดใหญ่ท่ามกลางวัตถุชิ้นเล็ก ๆ ART วางวัตถุขนาดใหญ่และบิตแมปทั้งหมดในกองแยกต่างหาก จากนั้นวัตถุเล็ก ๆ จะไปอยู่ในกองแยก นอกจากนี้ยังสามารถจัดระเบียบ
หลังจาก ART ถ้าคุณใช้Enum
Android ไม่สนใจและนี่คือสาเหตุที่คำแนะนำหายไปในขณะนี้
สิ่งนี้มาจาก Chet Haase ที่ Google ฉันแนะนำให้หา Google I / O ของเขาคุยและดูวิดีโอทั้งหมด มันมีข้อมูลที่เป็นประโยชน์มากมายและข้อมูลเชิงลึกเกี่ยวกับ Android
มันยังคงไม่ดีสำหรับประสิทธิภาพของหน่วยความจำ
https://developer.android.com/training/articles/memory.html#Overhead
แก้ไข: ตอนนี้มันจะถูกลบออก ปลอดภัยที่จะใช้ enums