ฉันไม่แน่ใจจริงๆว่าการใช้setHasStableId
แฟล็กจะช่วยแก้ปัญหาของคุณได้หรือไม่ จากข้อมูลที่คุณระบุปัญหาประสิทธิภาพอาจเกี่ยวข้องกับปัญหาหน่วยความจำ ประสิทธิภาพแอปพลิเคชันของคุณในแง่ของอินเทอร์เฟซผู้ใช้และหน่วยความจำค่อนข้างเกี่ยวข้องกัน
เมื่อสัปดาห์ที่แล้วฉันพบว่าแอปของฉันมีหน่วยความจำรั่ว ฉันค้นพบสิ่งนี้เพราะหลังจากใช้แอปไป 20 นาทีฉันสังเกตเห็นว่า UI ทำงานช้ามาก การปิด / เปิดกิจกรรมหรือการเลื่อน RecyclerView พร้อมองค์ประกอบต่างๆนั้นช้ามาก หลังจากตรวจสอบผู้ใช้ของฉันในการใช้งานจริงโดยใช้http://flowup.io/ฉันพบสิ่งนี้:
เวลาของเฟรมสูงมากและเฟรมต่อวินาทีก็ต่ำมาก คุณจะเห็นว่าบางเฟรมต้องใช้เวลาประมาณ 2 วินาทีในการเรนเดอร์: S
พยายามคิดว่าอะไรเป็นสาเหตุของเฟรมไทม์ / เฟรมต่อวินาทีที่ไม่ดีฉันพบว่าฉันมีปัญหาหน่วยความจำดังที่คุณเห็นที่นี่:
แม้ว่าการใช้หน่วยความจำโดยเฉลี่ยจะใกล้เคียงกับ 15MB ในเวลาเดียวกันแอปก็ทิ้งเฟรม
นั่นคือวิธีที่ฉันค้นพบปัญหา UI ฉันมีหน่วยความจำรั่วไหลในแอปของฉันทำให้เกิดเหตุการณ์ตัวเก็บขยะจำนวนมากและนั่นทำให้ประสิทธิภาพของ UI ไม่ดีเนื่องจาก Android VM ต้องหยุดแอปของฉันเพื่อรวบรวมหน่วยความจำทุกๆเฟรม
เมื่อดูโค้ดฉันมีข้อมูลรั่วไหลในมุมมองที่กำหนดเองเนื่องจากฉันไม่ได้ยกเลิกการลงทะเบียนผู้ฟังจากอินสแตนซ์นักออกแบบท่าเต้นของ Android หลังจากปล่อยการแก้ไขทุกอย่างก็เป็นปกติ :)
หากแอปของคุณตกเฟรมเนื่องจากปัญหาหน่วยความจำคุณควรตรวจสอบข้อผิดพลาดทั่วไปสองประการ:
ตรวจสอบว่าแอปของคุณจัดสรรออบเจ็กต์ภายในเมธอดที่เรียกใช้หลายครั้งต่อวินาทีหรือไม่ แม้ว่าการจัดสรรนี้สามารถดำเนินการในสถานที่อื่นที่ใบสมัครของคุณเริ่มช้า ตัวอย่างอาจเป็นการสร้างอินสแตนซ์ใหม่ของอ็อบเจ็กต์ภายในเมธอดมุมมองที่กำหนดเอง onDraw บน onBindViewHolder ในตัวยึดมุมมองมุมมองรีไซเคิลของคุณ ตรวจสอบว่าแอปของคุณกำลังลงทะเบียนอินสแตนซ์ใน Android SDK แต่ไม่ได้เปิดตัว การลงทะเบียนผู้ฟังในเหตุการณ์รถบัสอาจทำให้เกิดการรั่วไหลได้
คำเตือน: เครื่องมือที่ฉันใช้ตรวจสอบแอปของฉันอยู่ระหว่างการพัฒนา ฉันสามารถเข้าถึงเครื่องมือนี้ได้เพราะฉันเป็นหนึ่งในผู้พัฒนา :) หากคุณต้องการเข้าถึงเครื่องมือนี้เราจะปล่อยเวอร์ชันเบต้าในเร็ว ๆ นี้! คุณสามารถเข้าร่วมในเว็บไซต์ของเรา: http://flowup.io/
หากคุณต้องการใช้เครื่องมือต่างๆคุณสามารถใช้: Traveview, dmtracedump, systrace หรือ Andorid Performance Monitor ที่รวมอยู่ใน Android Studio แต่โปรดจำไว้ว่าเครื่องมือนี้จะตรวจสอบอุปกรณ์ที่เชื่อมต่อของคุณไม่ใช่ส่วนที่เหลือของอุปกรณ์ผู้ใช้หรือการติดตั้งระบบปฏิบัติการ Android