การส่งวัตถุ Parcelable เป็นแบบอนุกรมได้

โครงการ Android ที่เป็นปัญหาใช้ Serializable เพื่อส่งข้อมูลระหว่างโมดูลภายในแล้ว

ฉันกำลังทำงานกับหนึ่งในโมดูลเหล่านั้นซึ่งใช้ไลบรารีภายนอกเพื่อคำนวณเส้นทางการนำทางด้วย

ฉันต้องส่งหนึ่งในวัตถุ "ภายนอก" ไปยังโมดูลอื่น ซึ่งไม่สามารถทำให้เป็นอนุกรมได้ ดังนั้นฉันจึงไม่สามารถส่งได้ตามปกติ โปรแกรมเมอร์ที่อยู่ตรงหน้าฉันได้แปลงออบเจ็กต์ที่ไม่สามารถซีเรียลไลซ์ได้ทั้งหมดในตัวแปรคงที่ในคลาส Wrapper ฉันไม่แน่ใจว่านั่นเป็นความคิดที่ดีหรือไม่ แม้ว่าโมดูลควรจะยังคงทำงานอยู่ตลอดเวลาก็ตาม

นี่คือคลาส wrapper แบบอนุกรมได้:

private static Road road;
private NavigationStep firstNavigationStep;

/**
 * To send the route information to the App. Here is everything the app needs to display the
 * data to the user.
 * @param road the route the user is to follow
 * @param firstNavigationStep the users location and the current Step.
 */
public CurrentRoad(Road road, NavigationStep firstNavigationStep){
    this.firstNavigationStep = firstNavigationStep;
    this.road     = road;
}

การเขียนถนนแบบชั่วคราวทำให้ฉันสูญเสียข้อมูล การเขียนคลาส wrapper ทั้งหมดสำหรับถนนจะเป็นงานมากเกินไป (จำเป็นต้องสร้างการซ้อนทับ ดังนั้นเรขาคณิตจำนวนมากจึงอยู่ภายในและมาจากไลบรารีภายนอก ดังนั้นฉันอาจลืมบางสิ่งบางอย่าง) การเปลี่ยนโปรเจ็กต์ทั้งหมดเป็น Parcelable ก็ไม่ใช่เรื่องจริงเช่นกัน

มีวิธีแก้ไขหรือไม่? เป็นวิธีที่ดีที่สุดที่จะบันทึกสิ่งที่ฉันต้องการเป็นแบบคงที่จริงหรือ


person Raeglan    schedule 20.12.2016    source แหล่งที่มา


คำตอบ (2)


ลองใช้ EventBus ส่งเหตุการณ์ Sticky ซึ่งมีการอ้างอิงวัตถุ โดยจะถูกส่งไปยังทุกออบเจ็กต์ที่สมัครเป็นสมาชิกจนกว่าคุณจะยกเลิกกิจกรรมนั้นอย่างชัดเจน

person Alex Shutov    schedule 20.12.2016
comment
มีบริการข้อความที่อธิบายไว้ในสถาปัตยกรรมของเราแล้ว ซึ่งใช้ Serializable เป็น MessageManger ที่เขียนโดยบุคคลอื่นในโครงการ ฉันค่อนข้างใหม่ในทีมและโปรเจ็กต์นี้ครอบคลุมมากกว่าหนึ่งบริษัท ดังนั้นการเพิ่มไลบรารีภายนอกจึงไม่ง่ายนัก - person Raeglan; 20.12.2016

บางทีคุณอาจใช้เหตุการณ์ (http://greenrobot.org/eventbus/) เพื่อส่งวัตถุไปที่ ที่คุณต้องการมัน

person Julius    schedule 20.12.2016
comment
มีบริการข้อความที่อธิบายไว้ในสถาปัตยกรรมของเราแล้ว ซึ่งใช้ Serializable เป็น MessageManger ที่เขียนโดยบุคคลอื่นในโครงการ ฉันค่อนข้างใหม่ในทีมและโปรเจ็กต์นี้ครอบคลุมมากกว่าหนึ่งบริษัท ดังนั้นการเพิ่มไลบรารีภายนอกจึงไม่ง่ายนัก - person Raeglan; 20.12.2016
comment
ตกลง ฉันไม่แน่ใจว่าฉันเข้าใจความแตกต่างของคำถามของคุณ แต่บางทีคุณสามารถลองเก็บไว้ในอินสแตนซ์ซิงเกิลตันในคลาสแอปพลิเคชันของคุณ (อาจขยายออกไป) สมมติว่าคุณมีสิทธิ์เข้าถึงบริบทของแอปพลิเคชันอยู่เสมอ ซึ่งจะช่วยให้คุณสามารถจัดเก็บสิ่งที่ควรจะคงอยู่ได้นานเท่ากับแอปพลิเคชันของคุณ จากนั้นอาจเป็นเจตนาหรือสัญญาณอื่นเพื่อกระตุ้นให้อ่านค่าจากคลาส singlelton นี้ที่ส่วนรับ - person Julius; 20.12.2016