บทนำ:

การพัฒนา Android ได้เห็นความก้าวหน้าที่สำคัญในช่วงหลายปีที่ผ่านมา และด้วยการเปิดตัวองค์ประกอบทางสถาปัตยกรรม เช่น ViewModels การสร้างแอปที่แข็งแกร่งและบำรุงรักษาได้ง่ายกว่าที่เคย ViewModels มีบทบาทสำคัญในการแยกตรรกะ UI ออกจากตรรกะทางธุรกิจ ส่งผลให้โค้ดสะอาดขึ้นและปรับปรุงประสิทธิภาพของแอป ในบทความนี้ เราจะสำรวจคำถามที่พบบ่อย 10 ข้อเกี่ยวกับ ViewModels ใน Android และให้คำตอบที่กระชับเพื่อช่วยให้คุณเข้าใจองค์ประกอบทางสถาปัตยกรรมที่ทรงพลังนี้

ViewModel คืออะไร

ViewModel เป็นองค์ประกอบสถาปัตยกรรม Android ที่ให้วิธีจัดเก็บและจัดการข้อมูลที่เกี่ยวข้องกับ UI โดยแสดงถึงสถานะของอินเทอร์เฟซผู้ใช้และคงการเปลี่ยนแปลงการกำหนดค่า เช่น การหมุนหน้าจอ โดยไม่สูญเสียข้อมูล ViewModels ได้รับการออกแบบมาให้คำนึงถึงวงจรการใช้งาน เพื่อให้มั่นใจว่าจะถูกล้างโดยอัตโนมัติเมื่อองค์ประกอบ UI ที่เกี่ยวข้องถูกทำลาย

ViewModel แตกต่างจากกิจกรรมหรือแฟรกเมนต์อย่างไร

แม้ว่ากิจกรรมและแฟรกเมนต์จะแสดงองค์ประกอบ UI ที่เชื่อมโยงอย่างแน่นหนากับเฟรมเวิร์ก Android แต่ ViewModels จะทำหน้าที่เป็นเลเยอร์แยกต่างหากที่รับผิดชอบในการเก็บและจัดการข้อมูล ViewModels แตกต่างจากกิจกรรมและแฟรกเมนต์ตรงที่รอดจากการเปลี่ยนแปลงการกำหนดค่า และไม่มีการอ้างอิงถึงเฟรมเวิร์ก Android ทำให้เป็นอิสระและสามารถนำกลับมาใช้ใหม่ได้ในองค์ประกอบ UI ที่แตกต่างกัน

ฉันจะสร้าง ViewModel ได้อย่างไร

ในการสร้าง ViewModel คุณจะต้องขยายคลาส ViewModel ที่จัดทำโดยไลบรารี Android Jetpack ขอแนะนำให้สร้าง ViewModels โดยใช้คลาส ViewModelProvider เพื่อให้แน่ใจว่าอินสแตนซ์ที่ถูกต้องของ ViewModel จะถูกส่งกลับ ไม่ว่าจะเป็นอินสแตนซ์ใหม่หรืออินสแตนซ์ที่มีอยู่ซึ่งเชื่อมโยงกับการเปลี่ยนแปลงการกำหนดค่า

จุดประสงค์ของ ViewModelFactory คืออะไร

ViewModelFactory มีหน้าที่สร้างอินสแตนซ์ของ ViewModels ช่วยให้คุณสามารถส่งพารามิเตอร์ที่กำหนดเองไปยังตัวสร้าง ViewModel ทำให้สามารถฉีดการขึ้นต่อกันหรือเริ่มต้น ViewModel ด้วยข้อมูลเฉพาะได้ ด้วยการจัดเตรียม ViewModelFactory คุณสามารถแยกแยะข้อกังวลได้อย่างเหมาะสมและรักษาความสามารถในการทดสอบ ViewModels ของคุณ

ViewModels สื่อสารกับกิจกรรมหรือแฟรกเมนต์อย่างไร

ViewModels ไม่มีความรู้โดยตรงเกี่ยวกับกิจกรรมหรือแฟรกเมนต์ แต่จะสื่อสารกับส่วนประกอบ UI ผ่านการสังเกตออบเจ็กต์ LiveData หรือโดยใช้รูปแบบการสื่อสารอื่นๆ เช่น การโทรกลับหรืออินเทอร์เฟซ การแยกส่วนนี้ทำให้มั่นใจได้ว่า ViewModels ยังคงเป็นอิสระและสามารถทดสอบได้อย่างง่ายดาย

ViewModels สามารถเก็บการอ้างอิงถึงบริบทได้หรือไม่

ViewModels ไม่ควรเก็บการอ้างอิงถึงบริบท เนื่องจากอาจทำให้หน่วยความจำรั่วได้ ให้พิจารณาส่งผ่านการอ้างอิงเฉพาะบริบทที่จำเป็น เช่น ทรัพยากรหรือบริบทแอปพลิเคชัน เป็นพารามิเตอร์วิธีการแทนเมื่อจำเป็น

ViewModels จัดการกับการเปลี่ยนแปลงการกำหนดค่าอย่างไร

ViewModels ได้รับการออกแบบมาเพื่อให้อยู่รอดจากการเปลี่ยนแปลงการกำหนดค่า เช่น การหมุนหน้าจอ โดยไม่สูญเสียข้อมูล อินสแตนซ์ ViewModel เชื่อมโยงกับวงจรการใช้งานของส่วนประกอบ UI โฮสติ้ง ซึ่งโดยทั่วไปคือกิจกรรมหรือแฟรกเมนต์ เมื่อมีการเปลี่ยนแปลงการกำหนดค่า ViewModel จะไม่ถูกทำลาย และอินสแตนซ์ใหม่ขององค์ประกอบ UI จะได้รับอินสแตนซ์ ViewModel เดียวกันกับรุ่นก่อน

ฉันสามารถแบ่งปันข้อมูลระหว่างหลายแฟรกเมนต์โดยใช้ ViewModel ได้หรือไม่

ใช่ ViewModels สามารถแชร์ระหว่างหลาย Fragments ภายในกิจกรรมเดียวกันได้ ด้วยการสร้างอินสแตนซ์ ViewModel ในกิจกรรมหลักและเข้าถึงจากแต่ละ Fragment โดยใช้ ViewModelProvider คุณสามารถแชร์ข้อมูลและรับประกันความสอดคล้องกันใน Fragments

ฉันสามารถทดสอบ ViewModels ได้หรือไม่

ใช่ ViewModels สามารถทดสอบได้อย่างง่ายดายเนื่องจากไม่มีการพึ่งพาโดยตรงบนเฟรมเวิร์ก Android ด้วยการสร้างการทดสอบหน่วยสำหรับ ViewModels คุณสามารถตรวจสอบพฤติกรรม ทดสอบสถานการณ์ต่างๆ และรับรองความถูกต้องของตรรกะทางธุรกิจของแอปของคุณ

ViewModels สามารถแทนที่ความจำเป็นในการบันทึกข้อมูลใน onSaveInstanceState() ได้หรือไม่

ViewModels ไม่ได้มีจุดมุ่งหมายเพื่อแทนที่ความจำเป็นในการบันทึกสถานะอินสแตนซ์โดยใช้ onSaveInstanceState() แม้ว่า ViewModels จะรอดพ้นจากการเปลี่ยนแปลงการกำหนดค่า แต่จะไม่คงสถานะไว้ตลอดกระบวนการที่ระบบไม่ทำงาน สำหรับการเก็บรักษาข้อมูลระหว่างกระบวนการของระบบ