เอกสารนี้ถือว่าคุณได้ปฏิบัติตามคำแนะนำแนวทางปฏิบัติแนะนำสำหรับแอป Android ในส่วนการจัดการหน่วยความจำ เช่น จัดการหน่วยความจำของแอป
บทนำ
การรั่วไหลของหน่วยความจําเป็นประเภทการรั่วไหลของทรัพยากรที่เกิดขึ้นเมื่อโปรแกรมคอมพิวเตอร์ไม่ปล่อยหน่วยความจําที่จัดสรรไว้ซึ่งไม่จําเป็นต้องใช้แล้ว การสูญเสียหน่วยความจําอาจทําให้แอปพลิเคชันขอหน่วยความจําจากระบบปฏิบัติการมากกว่าที่มี ทำให้แอปพลิเคชันขัดข้อง แนวทางปฏิบัติที่ไม่เหมาะสมบางอย่างอาจทําให้หน่วยความจํารั่วไหลในแอป Android เช่น การไม่ทิ้งทรัพยากรอย่างถูกต้องหรือไม่ยกเลิกการลงทะเบียน Listener เมื่อไม่จําเป็นต้องใช้แล้ว
เอกสารนี้จะแสดงแนวทางปฏิบัติแนะนำบางส่วนเพื่อช่วยป้องกัน ตรวจหา และแก้ไขการรั่วไหลของหน่วยความจำในโค้ด หากลองใช้วิธีการในเอกสารนี้แล้วและสงสัยว่ามีการสูญเสียหน่วยความจำใน SDK ของเรา โปรดดูวิธีรายงานปัญหาเกี่ยวกับ Google SDK
สิ่งที่ควรทำก่อนติดต่อทีมสนับสนุน
ก่อนที่จะรายงานปัญหาหน่วยความจำรั่วไปยังทีมสนับสนุนของ Google โปรดทําตามแนวทางปฏิบัติแนะนําและขั้นตอนแก้ไขข้อบกพร่องที่ระบุไว้ในเอกสารนี้เพื่อให้แน่ใจว่าข้อผิดพลาดไม่ได้อยู่ในโค้ด ขั้นตอนเหล่านี้อาจช่วยแก้ปัญหาได้ และหากไม่ได้ผล ก็จะสร้างข้อมูลที่ทีมสนับสนุนของ Google ต้องการเพื่อช่วยคุณ
ป้องกันไม่ให้หน่วยความจํารั่วไหล
ทําตามแนวทางปฏิบัติแนะนําเหล่านี้เพื่อช่วยหลีกเลี่ยงสาเหตุที่พบบ่อยที่สุดของการรั่วไหลของหน่วยความจําในโค้ดที่ใช้ Google SDK
แนวทางปฏิบัติแนะนำสำหรับแอป Android
ตรวจสอบว่าคุณได้ทำสิ่งต่อไปนี้ทั้งหมดในแอปพลิเคชัน Android แล้ว
- ปล่อยทรัพยากรที่ไม่ได้ใช้
- ยกเลิกการลงทะเบียนผู้ฟังเมื่อไม่จําเป็นต้องใช้แล้ว
- ยกเลิกงานเมื่อไม่จำเป็น
- ส่งต่อเมธอดวงจรเพื่อปล่อยทรัพยากร
- ใช้ SDK เวอร์ชันล่าสุด
ดูรายละเอียดเฉพาะของแต่ละแนวทางปฏิบัติเหล่านี้ได้ที่ส่วนต่อไปนี้
ปล่อยทรัพยากรที่ไม่ได้ใช้
เมื่อแอป Android ใช้ทรัพยากร อย่าลืมปล่อยทรัพยากรเมื่อไม่จําเป็นต้องใช้อีกต่อไป หากไม่ดำเนินการดังกล่าว ทรัพยากรจะยังคงใช้หน่วยความจำต่อไปแม้ว่าแอปพลิเคชันจะเสร็จสิ้นการใช้งานแล้วก็ตาม ดูข้อมูลเพิ่มเติมได้ที่วงจรชีวิตของกิจกรรมในเอกสารประกอบของ Android
ปล่อยการอ้างอิง GoogleMap ที่ล้าสมัยใน GeoSDK
ข้อผิดพลาดที่พบบ่อยคือ GoogleMap อาจทำให้เกิดการรั่วไหลของหน่วยความจำหากแคชโดยใช้ NavigationView หรือ MapView GoogleMap มีความสัมพันธ์แบบ 1:1 กับ NavigationView หรือ MapView ที่ดึงข้อมูลมา คุณต้องตรวจสอบว่า GoogleMap ไม่ได้แคชไว้ หรือมีการปล่อยการอ้างอิงเมื่อเรียกใช้ NavigationView#onDestroy หรือ MapView#onDestroy หากใช้ NavigationSupportFragment, MapSupportFragment หรือแฟรกเมนต์ของคุณเองที่รวมมุมมองเหล่านี้ไว้ คุณต้องปล่อยการอ้างอิงใน Fragment#onDestroyView
class NavFragment : SupportNavigationFragment() {
var googleMap: GoogleMap?
override fun onCreateView(
inflater: LayoutInflater,
parent: ViewGroup?,
savedInstanceState: Bundle?,
): View {
super.onCreateView(inflater,parent,savedInstanceState)
getMapAsync{map -> googleMap = map}
}
override fun onDestroyView() {
googleMap = null
}
}
ยกเลิกการลงทะเบียนผู้ฟังเมื่อไม่จําเป็นต้องใช้แล้ว
เมื่อแอป Android ลงทะเบียนตัวรับฟังสําหรับเหตุการณ์ เช่น การคลิกปุ่มหรือการเปลี่ยนแปลงสถานะของมุมมอง อย่าลืมยกเลิกการลงทะเบียนตัวรับฟังเมื่อแอปพลิเคชันไม่จําเป็นต้องตรวจสอบเหตุการณ์อีกต่อไป หากไม่ดำเนินการดังกล่าว โปรแกรมฟังจะยังคงใช้หน่วยความจำต่อไปแม้ว่าแอปพลิเคชันจะเสร็จสิ้นการทำงานกับโปรแกรมฟังแล้วก็ตาม
ตัวอย่างเช่น สมมติว่าแอปพลิเคชันของคุณใช้ Navigation SDK และเรียกใช้ Listener ต่อไปนี้เพื่อรอรับเหตุการณ์การมาถึง addArrivalListener
ฟังก์ชันเพื่อรอรับเหตุการณ์การมาถึง ก็ควรเรียกใช้ removeArrivalListener
ด้วยเมื่อไม่จําเป็นต้องตรวจสอบเหตุการณ์การมาถึงอีกต่อไป
var arrivalListener: Navigator.ArrivalListener? = null
fun registerNavigationListeners() {
arrivalListener =
Navigator.ArrivalListener {
...
}
navigator.addArrivalListener(arrivalListener)
}
override fun onDestroy() {
navView.onDestroy()
if (arrivalListener != null) {
navigator.removeArrivalListener(arrivalListener)
}
...
super.onDestroy()
}
ยกเลิกงานเมื่อไม่จำเป็น
เมื่อแอป Android เริ่มงานแบบไม่พร้อมกัน เช่น การดาวน์โหลดหรือคำขอเครือข่าย อย่าลืมยกเลิกงานเมื่อดำเนินการเสร็จสิ้น หากไม่ได้ยกเลิกงาน งานที่ยกเลิกไปแล้วจะยังคงทำงานในเบื้องหลังต่อไปแม้ว่าแอปจะดำเนินการเสร็จแล้วก็ตาม
ดูรายละเอียดเพิ่มเติมเกี่ยวกับแนวทางปฏิบัติแนะนำได้ที่หัวข้อจัดการหน่วยความจำของแอปในเอกสารประกอบของ Android
ส่งต่อเมธอดวงจรเพื่อปล่อยทรัพยากร
หากแอปใช้ Navigation หรือ Maps SDK โปรดอย่าลืมเผยแพร่ทรัพยากรโดยการส่งต่อเมธอดวงจร (แสดงเป็นข้อความหนา) ไปยัง navView
คุณดำเนินการนี้ได้โดยใช้ NavigationView
ใน Navigation SDK หรือ MapView
ใน Maps หรือ Navigation SDK นอกจากนี้ คุณยังใช้ SupportNavigationFragment
หรือ SupportMapFragment
แทนการใช้ NavigationView
และ MapView
โดยตรงได้ ข้อมูลโค้ดสนับสนุนจะจัดการการส่งต่อเมธอดวงจร
class NavViewActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...
navView = ...
navView.onCreate(savedInstanceState)
...
}
override fun onSaveInstanceState(savedInstanceState: Bundle) {
super.onSaveInstanceState(savedInstanceState)
navView.onSaveInstanceState(savedInstanceState)
}
override fun onTrimMemory(level: Int) {
super.onTrimMemory(level)
navView.onTrimMemory(level)
}
/* Same with
override fun onStart()
override fun onResume()
override fun onPause()
override fun onConfigurationChanged(...)
override fun onStop()
override fun onDestroy()
*/
}
ใช้ SDK เวอร์ชันล่าสุด
Google SDK ได้รับการอัปเดตอย่างต่อเนื่องด้วยฟีเจอร์ใหม่ๆ การแก้ไขข้อบกพร่อง และการเพิ่มประสิทธิภาพ อัปเดต SDK ในแอปอยู่เสมอเพื่อรับการแก้ไขเหล่านี้
แก้ไขข้อบกพร่องหน่วยความจำรั่วไหล
หากยังคงเห็นปัญหาการสูญเสียหน่วยความจำหลังจากใช้คำแนะนำที่เกี่ยวข้องทั้งหมดก่อนหน้านี้ในเอกสารนี้ ให้ทำตามกระบวนการนี้เพื่อแก้ไขข้อบกพร่อง
ก่อนเริ่มต้น คุณควรทำความคุ้นเคยกับวิธีที่ Android จัดการหน่วยความจำ อ่านข้อมูลได้ที่ภาพรวมการจัดการหน่วยความจำของ Android
หากต้องการแก้ไขข้อบกพร่องหน่วยความจำที่รั่ว ให้ทำตามขั้นตอนต่อไปนี้
- สร้างปัญหาซ้ำ ขั้นตอนนี้สำคัญต่อการแก้ไขข้อบกพร่อง
- ตรวจสอบว่าการใช้งานหน่วยความจําเป็นไปตามที่คาดไว้หรือไม่ ตรวจสอบว่าการใช้งานที่เพิ่มขึ้นซึ่งดูเหมือนว่าจะเป็นการรั่วไหลนั้นไม่ใช่หน่วยความจําที่จําเป็นต่อการทำงานของแอปพลิเคชัน
- แก้ไขข้อบกพร่องในระดับสูง มียูทิลิตีหลายรายการที่คุณใช้แก้ไขข้อบกพร่องได้ ชุดเครื่องมือมาตรฐาน 3 ชุดที่แตกต่างกันจะช่วยแก้ไขข้อบกพร่องเกี่ยวกับหน่วยความจำใน Android ได้แก่ Android Studio, Perfetto และยูทิลิตีบรรทัดคำสั่ง Android Debug Bridge (adb)
- ตรวจสอบการใช้หน่วยความจำของแอป รับการดัมพ์กองขยะและการติดตามการจัดสรร จากนั้นวิเคราะห์
- แก้ไขหน่วยความจํารั่วไหล
ส่วนต่อไปนี้จะอธิบายขั้นตอนเหล่านี้โดยละเอียด
ขั้นตอนที่ 1: สร้างปัญหาอีกครั้ง
หากสร้างปัญหาไม่ได้ ให้พิจารณาสถานการณ์ที่อาจทําให้เกิดการสูญเสียหน่วยความจําก่อน การดูที่กองขยะโดยตรงอาจช่วยแก้ปัญหาได้ หากทราบว่าปัญหาเกิดขึ้นอีกครั้ง อย่างไรก็ตาม หากคุณได้รับกองข้อมูลเมื่อเริ่มต้นแอปหรือเมื่อใดก็ได้แบบสุ่ม แสดงว่าคุณอาจไม่ได้เปิดใช้งานเงื่อนไขที่จะทริกเกอร์การรั่วไหล ลองทำตามสถานการณ์ต่างๆ เมื่อพยายามจำลองปัญหาอีกครั้ง
มีการเปิดใช้งานชุดฟีเจอร์ใดบ้าง
ลําดับการดําเนินการที่เฉพาะเจาะจงของผู้ใช้ใดที่ทริกเกอร์การรั่วไหล
- คุณได้ลองเปิดใช้งานลําดับนี้หลายครั้งแล้วหรือยัง
แอปผ่านสถานะวงจรใดบ้าง
- คุณได้ลองทำซ้ำหลายครั้งผ่านสถานะต่างๆ ของวงจรแล้วหรือยัง
ตรวจสอบว่าคุณสร้างปัญหาซ้ำได้ใน SDK เวอร์ชันล่าสุด ปัญหาจากเวอร์ชันก่อนหน้าอาจได้รับการแก้ไขแล้ว
ขั้นตอนที่ 2: ตรวจสอบว่าการใช้หน่วยความจำของแอปเป็นไปตามที่คาดไว้หรือไม่
ฟีเจอร์ทุกรายการต้องใช้หน่วยความจำเพิ่มเติม เมื่อแก้ไขข้อบกพร่องในสถานการณ์ต่างๆ ให้พิจารณาว่าการใช้งานนี้อาจเป็นไปตามที่คาดไว้หรือไม่ หรือเป็นปัญหาการสูญเสียหน่วยความจำ เช่น สําหรับฟีเจอร์หรืองานต่างๆ ของผู้ใช้ ให้พิจารณาความเป็นไปได้ต่อไปนี้
มีแนวโน้มว่าจะมีการรั่วไหล: การเปิดใช้งานสถานการณ์ผ่านการวนซ้ำหลายครั้งส่งผลให้มีการใช้หน่วยความจําเพิ่มขึ้นเมื่อเวลาผ่านไป
การใช้งานหน่วยความจําที่คาดไว้: ระบบจะเรียกคืนหน่วยความจําหลังจากหยุดสถานการณ์
การใช้งานหน่วยความจําที่อาจเกิดขึ้นตามปกติ: การใช้งานหน่วยความจําเพิ่มขึ้นเป็นระยะเวลาหนึ่งแล้วค่อยๆ ลดลง ซึ่งอาจเป็นเพราะแคชที่มีขอบเขตหรือการใช้งานหน่วยความจําอื่นๆ ที่คาดไว้
หากลักษณะการทํางานของแอปมีแนวโน้มที่จะใช้หน่วยความจําตามที่คาดไว้ ปัญหานี้สามารถแก้ไขได้ด้วยการจัดการหน่วยความจําของแอป หากต้องการความช่วยเหลือ โปรดดูหัวข้อจัดการหน่วยความจำของแอป
ขั้นตอนที่ 3: แก้ไขข้อบกพร่องในระดับสูง
เมื่อแก้ไขข้อบกพร่องหน่วยความจำที่รั่ว ให้เริ่มที่ระดับสูง แล้วเจาะลึกเมื่อคุณจำกัดความเป็นไปได้ให้แคบลง ใช้เครื่องมือแก้ไขข้อบกพร่องระดับสูงอย่างใดอย่างหนึ่งต่อไปนี้เพื่อวิเคราะห์ก่อนว่ามีการรั่วไหลเมื่อเวลาผ่านไปหรือไม่
เครื่องมือสร้างโปรไฟล์หน่วยความจำของ Android Studio
เครื่องมือนี้จะแสดงฮิสโตแกรมภาพหน่วยความจำที่ใช้ นอกจากนี้ คุณยังเรียกใช้การติดตามการดัมพ์กองและการจัดสรรได้จากอินเทอร์เฟซเดียวกันนี้ เครื่องมือนี้เป็นคําแนะนําเริ่มต้น ดูข้อมูลเพิ่มเติมได้ที่เครื่องมือวิเคราะห์หน่วยความจำของ Android Studio
ตัวนับหน่วยความจํา Perfetto
Perfetto ช่วยให้คุณควบคุมการติดตามเมตริกหลายรายการได้อย่างแม่นยำและแสดงข้อมูลทั้งหมดในฮิสโตแกรมเดียว ดูข้อมูลเพิ่มเติมได้ที่ตัวนับหน่วยความจํา Perfetto
ยูทิลิตีบรรทัดคำสั่ง Android Debug Bridge (adb)
ข้อมูลส่วนใหญ่ที่คุณติดตามได้ด้วย Perfetto ยังพร้อมใช้งานเป็นadb
ยูทิลิตีบรรทัดคำสั่งที่คุณค้นหาได้โดยตรง ตัวอย่างที่สำคัญ 2 ตัวอย่าง ได้แก่
Meminfo ช่วยให้คุณดูข้อมูลหน่วยความจำโดยละเอียด ณ ช่วงเวลาหนึ่งได้
Procstats ให้สถิติรวมที่สำคัญบางอย่างเมื่อเวลาผ่านไป
สถิติที่สําคัญที่ต้องดูในส่วนนี้คือพื้นที่หน่วยความจําจริงสูงสุด (maxRSS) ที่แอปจําเป็นต้องใช้เมื่อเวลาผ่านไป MaxPSS อาจไม่แม่นยำเท่า ดูวิธีเพิ่มความแม่นยำได้ที่การแจ้งว่าadb shell dumpsys procstats --help –start-testing
การติดตามการจัดสรร
การติดตามการจัดสรรจะระบุสแต็กเทรซที่มีการจัดสรรหน่วยความจําและระบุว่ามีการเพิ่มพื้นที่ว่างหน่วยความจําหรือไม่ ขั้นตอนนี้จะเป็นประโยชน์อย่างยิ่งเมื่อติดตามการโจรกรรมในโค้ดเนทีฟ เนื่องจากเครื่องมือนี้ระบุสแต็กเทรซ จึงเหมาะอย่างยิ่งในการแก้ไขข้อบกพร่องของสาเหตุหลักอย่างรวดเร็วหรือหาวิธีสร้างปัญหาขึ้นมาใหม่ ดูขั้นตอนการใช้การติดตามการจัดสรรได้ที่แก้ไขข้อบกพร่องหน่วยความจําในโค้ดเนทีฟด้วยการติดตามการจัดสรร
ขั้นตอนที่ 4: ตรวจสอบการใช้หน่วยความจําของแอปด้วยฮีปดัมพ์
วิธีหนึ่งในการหาการรั่วไหลของหน่วยความจำคือการรับการดัมพ์กองของแอป แล้วตรวจสอบการรั่วไหล การดัมพ์ฮีปคือสแนปชอตของออบเจ็กต์ทั้งหมดในหน่วยความจําของแอป ซึ่งสามารถใช้เพื่อวินิจฉัยปัญหาหน่วยความจำรั่วไหลและปัญหาอื่นๆ ที่เกี่ยวข้องกับหน่วยความจำ
Android Studio สามารถตรวจหาหน่วยความจำที่รั่วซึ่ง GC แก้ไขไม่ได้ เมื่อคุณบันทึกดัมพ์กอง Android Studio จะตรวจสอบว่ามีกิจกรรมหรือส่วนที่เข้าถึงได้อยู่แต่ถูกทำลายไปแล้วหรือไม่
โปรดดูรายละเอียดที่หัวข้อด้านล่าง
บันทึกฮีปดัมป์
หากต้องการบันทึกฮีปดัมป์ ให้ใช้ Android Debug Bridge (adb) หรือเครื่องมือวิเคราะห์หน่วยความจำของ Android Studio
ใช้ adb เพื่อบันทึกฮีปดัมป์
หากต้องการบันทึกกองขยะโดยใช้ adb ให้ทำตามขั้นตอนต่อไปนี้
- เชื่อมต่ออุปกรณ์ Android กับคอมพิวเตอร์
- เปิด Command Prompt แล้วไปยังไดเรกทอรีที่มีเครื่องมือ adb
หากต้องการบันทึกการถ่ายโอนข้อมูลกอง ให้เรียกใช้คําสั่งนี้
adb shell am dumpheap my.app.name $PHONE_FILE_OUT
หากต้องการเรียกข้อมูลการดัมพ์กอง ให้เรียกใช้คําสั่งนี้
adb pull $PHONE_FILE_OUT $LOCAL_FILE.
ใช้ Android Studio เพื่อบันทึกฮีปดัมป์
หากต้องการบันทึกฮีปดัมป์โดยใช้เครื่องมือวิเคราะห์หน่วยความจำของ Android Studio ให้ทำตามขั้นตอนต่อไปนี้ในส่วนบันทึกฮีปดัมป์ของ Android
วิเคราะห์ฮีปดัมป์เพื่อหาการรั่วไหลของหน่วยความจำ
เมื่อบันทึกฮีปดัมป์แล้ว คุณจะใช้เครื่องมือวิเคราะห์หน่วยความจำของ Android Studio เพื่อวิเคราะห์ฮีปดัมป์ได้ โดยทำตามขั้นตอนต่อไปนี้
เปิดโปรเจ็กต์ Android ใน Android Studio
เลือกเรียกใช้ แล้วเลือกการกําหนดค่าแก้ไขข้อบกพร่อง
เปิดแท็บเครื่องมือวิเคราะห์ Android
เลือกหน่วยความจำ
เลือกเปิดการดัมพ์กอง แล้วเลือกไฟล์การดัมพ์กองที่คุณสร้างขึ้น เครื่องมือวิเคราะห์หน่วยความจำจะแสดงกราฟของการใช้หน่วยความจำของแอป
ใช้กราฟเพื่อวิเคราะห์กองข้อมูลฮีป
ระบุวัตถุที่ไม่ได้ใช้งานแล้ว
ระบุออบเจ็กต์ที่ใช้หน่วยความจำมาก
ดูว่าออบเจ็กต์แต่ละรายการใช้หน่วยความจำเท่าใด
ใช้ข้อมูลนี้เพื่อจำกัดขอบเขตหรือค้นหาแหล่งที่มาของหน่วยความจำที่รั่วไหลและแก้ไข
ขั้นตอนที่ 5: แก้ไขหน่วยความจํารั่วไหล
เมื่อทราบแหล่งที่มาของการรั่วไหลของหน่วยความจำแล้ว คุณจะแก้ไขได้ การแก้ไขการสูญเสียหน่วยความจำในแอป Android จะช่วยปรับปรุงประสิทธิภาพและความเสถียรของแอป รายละเอียดจะแตกต่างกันไปตามสถานการณ์ อย่างไรก็ตาม คำแนะนำต่อไปนี้อาจช่วยได้
ตรวจสอบว่าแอปของคุณจัดสรรและยกเลิกการจัดสรรหน่วยความจำตามที่หัวข้อ Android แนะนำจัดการหน่วยความจำของแอป
นำโค้ดหรือทรัพยากรที่ไม่ได้ใช้ออกจากแอป ดูรายละเอียดสำหรับแอป Android ได้ที่แนวทางปฏิบัติแนะนำสำหรับแอป Android
เครื่องมือแก้ไขข้อบกพร่องอื่นๆ
หลังจากทำตามขั้นตอนเหล่านี้แล้ว หากยังไม่พบและแก้ไขการสูญเสียหน่วยความจำได้ ให้ลองใช้เครื่องมือต่อไปนี้
แก้ไขข้อบกพร่องหน่วยความจําในโค้ดเนทีฟด้วยการติดตามการจัดสรร
แม้ว่าคุณจะไม่ได้ใช้โค้ดเนทีฟโดยตรง แต่ไลบรารี Android ทั่วไปหลายรายการก็ใช้อยู่ รวมถึง SDK ของ Google หากคิดว่าปัญหาการสูญเสียหน่วยความจำอยู่ในโค้ดเนทีฟ คุณสามารถใช้เครื่องมือหลายอย่างเพื่อแก้ไขข้อบกพร่องได้ การติดตามการจัดสรรด้วย Android Studio หรือ heapprofd (ใช้ได้กับ Perfetto ด้วย) เป็นวิธีที่ยอดเยี่ยมในการระบุสาเหตุที่เป็นไปได้ของการรั่วไหลของหน่วยความจำ และมักเป็นวิธีที่เร็วที่สุดในการแก้ไขข้อบกพร่อง
การติดตามการกําหนดแหล่งที่มายังมีข้อดีอีกอย่างคือช่วยให้คุณแชร์ผลลัพธ์ได้โดยไม่ต้องใส่ข้อมูลที่ละเอียดอ่อนซึ่งพบได้ในฮีป
ระบุการรั่วไหลด้วย LeakCanary
LeakCanary เป็นเครื่องมือที่มีประสิทธิภาพในการระบุปัญหาหน่วยความจำรั่วไหลในแอป Android ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้ LeakCanary ในแอปได้ที่ LeakCanary
วิธีรายงานปัญหาเกี่ยวกับ SDK ของ Google
หากคุณลองใช้วิธีการในเอกสารนี้แล้วและสงสัยว่า SDK ของเรามีการรั่วไหลของหน่วยความจำ โปรดติดต่อทีมสนับสนุนลูกค้าพร้อมระบุข้อมูลต่อไปนี้ให้ได้มากที่สุด
ขั้นตอนในการสร้างปัญหาการรั่วไหลของหน่วยความจำขึ้นใหม่ หากขั้นตอนต้องใช้การเขียนโค้ดที่ซับซ้อน คุณอาจลองคัดลอกโค้ดที่จำลองปัญหาลงในแอปตัวอย่างของเรา แล้วระบุขั้นตอนเพิ่มเติมที่ต้องดำเนินการใน UI เพื่อทริกเกอร์การรั่วไหล
กองข้อมูลฮีปที่บันทึกจากแอปของคุณซึ่งสร้างปัญหาขึ้นมาใหม่ บันทึกการดัมพ์กองขยะ ณ 2 จุดที่แตกต่างกันซึ่งแสดงให้เห็นว่าการใช้งานหน่วยความจําเพิ่มขึ้นอย่างมาก
หากคาดว่าจะมีการรั่วไหลของหน่วยความจำแบบเนทีฟ ให้แชร์เอาต์พุตการติดตามการจัดสรรจาก heapprofd
รายงานข้อบกพร่องที่บันทึกไว้หลังจากที่คุณสร้างเงื่อนไขการรั่วไหลขึ้นมาใหม่
สแต็กเทรซของข้อขัดข้องเกี่ยวกับหน่วยความจำ
หมายเหตุสำคัญ: โดยทั่วไปแล้ว สแต็กเทรซเพียงอย่างเดียวไม่เพียงพอที่จะแก้ไขข้อผิดพลาดเกี่ยวกับหน่วยความจำ ดังนั้นโปรดระบุข้อมูลในรูปแบบอื่นๆ ด้วย