นี่คือคำอธิบายโดยละเอียดเพิ่มเติม:
นักออกแบบท่าเต้นอนุญาตให้แอปเชื่อมต่อตัวเองกับ vsync และเวลาที่เหมาะสมในการปรับปรุงประสิทธิภาพ
ภาพเคลื่อนไหวในมุมมอง Android ใช้ Choreographer ภายในเพื่อจุดประสงค์เดียวกัน: เพื่อให้เหมาะสมกับเวลาของภาพเคลื่อนไหวและอาจปรับปรุงประสิทธิภาพ
เนื่องจากผู้ฝึกสอนได้รับการบอกเล่าเกี่ยวกับเหตุการณ์ vsync ทุกครั้งฉันสามารถบอกได้ว่าหนึ่งใน Runnables ที่ส่งผ่านโดย Choreographer.post * apis ไม่เสร็จในเวลาเดียวของเฟรมทำให้เฟรมถูกข้าม
ในความเข้าใจของฉันนักออกแบบท่าเต้นสามารถตรวจจับการข้ามเฟรมเท่านั้น มันไม่มีทางบอกได้ว่าทำไมสิ่งนี้ถึงเกิดขึ้น
ข้อความ“ แอปพลิเคชันอาจทำงานได้มากเกินไปบนเธรดหลัก” อาจทำให้เข้าใจผิด
แหล่งที่มา:
ความหมายของข้อความนักออกแบบท่าเต้นใน Logcat
ทำไมคุณควรกังวล
เมื่อข้อความนี้ปรากฏขึ้นบน Android emulator และจำนวนของเฟรมที่ข้ามมีขนาดค่อนข้างเล็ก (<100) จากนั้นคุณสามารถเดิมพันอย่างปลอดภัยของโปรแกรมจำลองการทำงานช้าซึ่งเกิดขึ้นเกือบทุกครั้ง แต่ถ้าจำนวนของเฟรมข้ามและใหญ่และเป็นลำดับ 300+ อาจมีปัญหาร้ายแรงกับรหัสของคุณ อุปกรณ์ Android มีฮาร์ดแวร์มากมายไม่เหมือน iOS และอุปกรณ์ windows RAM และ CPU แตกต่างกันไปและหากคุณต้องการประสิทธิภาพที่เหมาะสมและประสบการณ์การใช้งานของผู้ใช้ในทุกอุปกรณ์คุณจะต้องแก้ไขสิ่งนี้ เมื่อเฟรมถูกข้าม UI จะช้าและล้าหลังซึ่งไม่ใช่ประสบการณ์ผู้ใช้ที่ต้องการ
วิธีแก้ไข
การแก้ไขสิ่งนี้ต้องระบุโหนดที่มีหรืออาจเกิดขึ้นเป็นระยะเวลานานในการประมวลผล วิธีที่ดีที่สุดคือทำการประมวลผลทั้งหมดไม่ว่าเล็กหรือใหญ่ในเธรดแยกจากเธรด UI หลัก ดังนั้นไม่ว่าจะเป็นการเข้าถึงข้อมูลในฐานข้อมูล SQLite หรือทำคณิตศาสตร์ง่าย ๆ หรือจัดเรียงอาเรย์ - ทำในเธรดอื่น
ขณะนี้มีการจับคุณจะสร้างเธรดใหม่สำหรับการดำเนินการเหล่านี้และเมื่อคุณเรียกใช้แอปพลิเคชันของคุณมันจะพังว่า "เฉพาะเธรดต้นฉบับที่สร้างลำดับชั้นการดูเท่านั้นที่สามารถสัมผัสมุมมอง" คุณจำเป็นต้องรู้ข้อเท็จจริงนี้ว่า UI ใน Android สามารถเปลี่ยนได้โดยเธรดหลักหรือเธรด UI เท่านั้น เธรดอื่นใดที่พยายามทำล้มเหลวและล้มเหลวด้วยข้อผิดพลาดนี้ สิ่งที่คุณต้องทำคือสร้าง Runnable ใหม่ภายใน runOnUiThread และภายใน runnable นี้คุณควรดำเนินการทั้งหมดที่เกี่ยวข้องกับ UI ค้นหาตัวอย่างที่นี่
ดังนั้นเราจึงมีเธรดและ Runnable สำหรับการประมวลผลข้อมูลจากเธรดหลักมีอะไรอีกบ้าง มี AsyncTask ในแอนดรอยด์ซึ่งช่วยให้สามารถทำกระบวนการเป็นเวลานานบนเธรด UI สิ่งนี้มีประโยชน์มากที่สุดเมื่อแอปพลิเคชันของคุณขับเคลื่อนข้อมูลหรือใช้เว็บ API หรือใช้ UI ที่ซับซ้อนเช่นงานสร้างโดยใช้ Canvas พลังของ AsyncTask คือการอนุญาตให้ทำสิ่งต่าง ๆ ในพื้นหลังและเมื่อคุณทำการประมวลผลเสร็จแล้วคุณสามารถดำเนินการตามที่ต้องการบน UI ได้โดยไม่ทำให้เกิดความล่าช้า สิ่งนี้เป็นไปได้เนื่องจาก AsyncTask มาจากเธรด UI ของกิจกรรม - การดำเนินการทั้งหมดที่คุณทำบน UI ผ่าน AsyncTask เสร็จแล้วเป็นเธรดอื่นจากเธรด UI หลักไม่มีสิ่งกีดขวางต่อการโต้ตอบของผู้ใช้
ดังนั้นนี่คือสิ่งที่คุณต้องรู้สำหรับการสร้างแอพพลิเคชั่น Android ที่ราบรื่นและเท่าที่ฉันรู้ว่าผู้เริ่มต้นทุกคนได้รับข้อความนี้บนคอนโซลของเขา