การมองมุมมองของวอลเล่ที่นี่มีข้อดีสำหรับความต้องการของคุณ:
ในอีกด้านหนึ่ง Volley นั้นให้ความสำคัญกับการจัดการคำขอ HTTP ขนาดเล็กเป็นรายบุคคล ดังนั้นหากการจัดการคำร้องขอ HTTP ของคุณมีข้อผิดพลาดบางอย่างวอลเล่ย์อาจมีตะขอสำหรับคุณ หากในมืออื่น ๆ ที่คุณมีมุมแหลมในการจัดการภาพของคุณเบ็ดจริงเท่านั้นที่คุณมีคือImageCache "มันไม่ใช่อะไร แต่มันก็ไม่มาก! เช่นกัน" แต่มีข้อได้เปรียบอื่น ๆ เพิ่มเติมเช่นเมื่อคุณกำหนดคำขอของคุณการใช้พวกเขาจากภายในส่วนหรือกิจกรรมนั้นไม่เจ็บปวดไม่เหมือน AsyncTasks แบบขนาน
ข้อดีและข้อเสียของการวอลเลย์:
ดังนั้นสิ่งที่ดีเกี่ยวกับวอลเล่ย์?
ส่วนเครือข่ายไม่ได้มีไว้สำหรับภาพเท่านั้น วอลเล่ย์ตั้งใจที่จะเป็นส่วนหนึ่งของส่วนหลังของคุณ สำหรับโครงการใหม่ที่ใช้บริการ REST แบบง่ายนี่อาจเป็นชัยชนะครั้งใหญ่
NetworkImageView มีความก้าวร้าวมากขึ้นเกี่ยวกับคำขอล้างข้อมูลมากกว่า Picasso และอนุรักษ์นิยมมากขึ้นในรูปแบบการใช้งาน GC NetworkImageView ขึ้นอยู่กับการอ้างอิงหน่วยความจำที่แข็งแกร่งและล้างข้อมูลคำขอทั้งหมดทันทีที่มีการร้องขอใหม่สำหรับ ImageView หรือทันทีที่ ImageView ย้ายออกนอกจอ
ประสิทธิภาพ. โพสต์นี้จะไม่ประเมินการอ้างสิทธิ์นี้ แต่พวกเขาใช้ความระมัดระวังอย่างรอบคอบในการใช้รูปแบบการใช้หน่วยความจำ วอลเล่ย์ยังใช้ความพยายามในการแบทช์กลับไปที่เธรดหลักเพื่อลดการสลับบริบท
เห็นได้ชัดว่าวอลเล่ย์ก็มีอนาคตเช่นกัน ตรวจสอบ RequestFuture หากคุณสนใจ
หากคุณกำลังจัดการกับภาพที่ถูกบีบอัดความละเอียดสูงวอลเล่ย์เป็นทางออกเดียวที่ทำงานได้ดี
วอลเล่ย์สามารถใช้กับ Okhttp (เวอร์ชั่นใหม่ของ Okhttp รองรับ NIO เพื่อประสิทธิภาพที่ดีขึ้น)
วอลเล่ย์เล่นได้ดีกับวงจรชีวิตของกิจกรรม
ปัญหาเกี่ยวกับวอลเล่ย์:
เนื่องจากวอลเล่ย์เป็นของใหม่บางสิ่งยังไม่ได้รับการสนับสนุน แต่มันได้รับการแก้ไข
คำขอหลายส่วน (โซลูชัน: https://github.com/vinaysshenoy/enhanced-volley )
รหัสสถานะ 201 ถือเป็นข้อผิดพลาดรหัสสถานะ 200 ถึง 207 เป็นคำตอบที่ประสบความสำเร็จในขณะนี้ (แก้ไข: https://github.com/Vinayrraj/CustomVolley )
อัปเดต:ในรุ่นล่าสุดของ Google วอลเลย์ข้อบกพร่องรหัสสถานะ 2XX ได้รับการแก้ไขแล้วขอบคุณ Ficus Kirkpatrick!
เป็นเอกสารน้อย แต่หลายคนที่จะสนับสนุนวอลเลย์ใน GitHub, Java เช่นเอกสารที่สามารถพบได้ที่นี่ บนเว็บไซต์ของนักพัฒนาหุ่นยนต์คุณอาจพบคำแนะนำสำหรับการส่งสัญญาณเครือข่ายข้อมูลโดยใช้วอลเล่ย์ และรหัสแหล่งวอลเล่ย์สามารถพบได้ที่Google Git
เพื่อแก้ไข / เปลี่ยนแปลงนโยบายการเปลี่ยนเส้นทางของ Volley Framework ใช้ Volley กับ OkHTTP (คอมมอนส์ที่กล่าวถึงข้างต้น)
นอกจากนี้คุณยังสามารถอ่านการโหลดรูปภาพเปรียบเทียบกับ Picasso
retrofit:
เปิดตัวโดยSquareข้อเสนอนี้ใช้งานง่ายมากของ REST API (อัปเดต: Voila! พร้อมการรองรับ NIO)
ข้อดีของชุดติดตั้งเพิ่มเติม:
เปรียบเทียบกับวอลเล่ย์รหัส REST API ของ Retrofit นั้นสั้นและให้เอกสาร API ที่ยอดเยี่ยมและมีการสนับสนุนที่ดีในชุมชน! มันง่ายมากที่จะเพิ่มเข้าไปในโครงการ
เราสามารถใช้กับไลบรารีการทำให้เป็นอนุกรมใด ๆ ด้วยการจัดการข้อผิดพลาด
อัปเดต:
- มีการเปลี่ยนแปลงที่ดีมากมายใน Retrofit 2.0.0-beta2
- Retrofit เวอร์ชัน 1.6 กับ OkHttp 2.0 ตอนนี้ขึ้นอยู่กับOkioเพื่อสนับสนุนjava.ioและjava.nioซึ่งทำให้เข้าถึงเข้าถึงจัดเก็บและประมวลผลข้อมูลของคุณได้ง่ายขึ้นโดยใช้ByteStringและBufferเพื่อทำสิ่งที่ฉลาดเพื่อประหยัด CPU และหน่วยความจำ (FYI: นี้ทำให้ผมนึกถึงOIN Koush ของห้องสมุดด้วยการสนับสนุน NIO!)
เราสามารถใช้ติดตั้งเพิ่มร่วมกับ RxJavaจะรวมและบริการโทรห่วงโซ่ REST ใช้rxObservablesเพื่อหลีกเลี่ยงการโทรกลับโซ่น่าเกลียด(เพื่อหลีกเลี่ยงการเรียกกลับนรก !!)
ข้อเสียของชุดติดตั้งเพิ่มสำหรับรุ่น 1.6:
ฟังก์ชั่นการจัดการข้อผิดพลาดที่เกี่ยวข้องกับหน่วยความจำไม่ดี (ใน Retrofit / OkHttp เวอร์ชั่นเก่ากว่า) ไม่แน่ใจว่าได้รับการปรับปรุงด้วยการสนับสนุน Okio กับ Java NIO
ความช่วยเหลือขั้นต่ำในการทำเกลียวอาจส่งผลให้โทรกลับนรกหากเราใช้วิธีนี้ในวิธีที่ไม่เหมาะสม
(ข้อด้อยทั้งหมดข้างต้นได้รับการแก้ไขในเวอร์ชั่นใหม่ของ Retrofit 2.0 เบต้า)
================================================== ======================
ปรับปรุง:
Android Async vs Volley vs การวัดประสิทธิภาพ Retrofit (มิลลิวินาทีค่าที่ต่ำกว่าดีกว่า):
(FYI ข้างต้นข้อมูลการติดตั้งเพิ่มเติมจะปรับปรุงด้วยการสนับสนุน java NIO เนื่องจากเวอร์ชันใหม่ของ OKhttp ขึ้นอยู่กับไลบรารี NIO Okio)
ในการทดสอบทั้งสามครั้งด้วยการทำซ้ำที่แตกต่างกัน (1 - 25 ครั้ง) วอลเล่ย์อยู่ที่ใดก็ได้จาก 50% ถึง 75% เร็วขึ้น ชุดติดตั้งเพิ่มเติมติดตั้งด้วยความเร็วที่น่าประทับใจกว่า AsyncTasks 50% ถึง 90% โดยกดจุดปลายทางเดียวกันตามจำนวนครั้งที่เท่ากัน ในชุดทดสอบแดชบอร์ดสิ่งนี้แปลเป็นการโหลด / แยกข้อมูลได้เร็วขึ้นหลายวินาที นั่นคือความแตกต่างในโลกแห่งความจริงที่ยิ่งใหญ่ เพื่อให้การทดสอบมีความยุติธรรมเวลาสำหรับ AsyncTasks / Volley จะรวมการแยก JSON เนื่องจาก Retrofit ทำเพื่อคุณโดยอัตโนมัติ
RetroFit ชนะการทดสอบเกณฑ์มาตรฐาน!
ในที่สุดเราตัดสินใจที่จะไปกับ Retrofit สำหรับการสมัครของเรา ไม่เพียง แต่มันจะขันเร็ว แต่มันก็เข้ากันได้ดีกับสถาปัตยกรรมที่มีอยู่ของเรา เราสามารถสร้างอินเทอร์เฟซผู้โทรกลับที่ดำเนินการจัดการข้อผิดพลาดแคชและการแบ่งหน้าอัตโนมัติโดยไม่ต้องใช้ความพยายามเล็กน้อยสำหรับ API ของเรา เพื่อที่จะรวมใน Retrofit เราต้องเปลี่ยนชื่อตัวแปรของเราเพื่อให้แบบจำลอง GSON ของเราเป็นไปตามมาตรฐานเขียนอินเทอร์เฟซง่ายๆสองสามลบฟังก์ชั่นจาก API เก่าและดัดแปลงชิ้นส่วนของเราเพื่อไม่ใช้ AsyncTasks ตอนนี้เรามีการแปลงเป็นเศษเล็กเศษน้อยอย่างสมบูรณ์แล้วมันค่อนข้างเจ็บปวด มีความเจ็บปวดและปัญหาเพิ่มขึ้นที่เราต้องเอาชนะ แต่โดยรวมแล้วมันก็ราบรื่น ในการเริ่มต้นเราพบปัญหา / ข้อบกพร่องทางเทคนิคเล็กน้อย แต่ Square มีชุมชน Google+ ที่ยอดเยี่ยมที่สามารถช่วยเหลือเราได้
เมื่อใดที่จะใช้วอลเล่ย์!
เราสามารถใช้วอลเล่ย์เมื่อเราต้องการโหลดรูปภาพรวมถึงการใช้ REST APIs!, ระบบการจัดคิวการโทรเครือข่ายเป็นสิ่งจำเป็นสำหรับคำขอ n / w จำนวนมากในเวลาเดียวกัน! วอลเล่ย์ยังมีข้อผิดพลาดเกี่ยวกับการจัดการหน่วยความจำดีกว่า Retrofit!
OkHttpสามารถใช้กับ Volley, Retrofit ใช้OkHttpโดยค่าเริ่มต้น! มันมีการสนับสนุนSPDY , การเชื่อมต่อร่วมกัน, แคชดิสก์, การบีบอัดแบบโปร่งใส! เมื่อเร็ว ๆ นี้ได้รับการสนับสนุนบางส่วนของ java NIO ด้วยไลบรารีOkio
แหล่งที่มาของสินเชื่อ: volley-vs-retrofitโดย Mr. Josh Ruesch
หมายเหตุ: เกี่ยวกับการสตรีมมันขึ้นอยู่กับประเภทของการสตรีมที่คุณต้องการเช่น RTSP / RTCP