ฉันมีวัตถุอาณาจักรที่สร้างขึ้นในกิจกรรมของฉัน ฉันต้องสามารถเข้าถึงออบเจ็กต์นี้ภายในบริการที่ฉันสร้างขึ้นได้ อย่างไรก็ตาม ฉันได้รับข้อผิดพลาดเมื่อสร้างวัตถุ Realm ภายในบริการ
mRealm = Realm.getInstance(getApplicationContext());
java.lang.IllegalStateException: การเข้าถึงขอบเขตจากเธรดที่ไม่ถูกต้อง วัตถุขอบเขตสามารถเข้าถึงได้บนเธรดที่สร้างขึ้นเท่านั้น
ตอนนี้ฉันเข้าใจแล้วว่าเนื่องจากวัตถุอาณาจักรถูกสร้างขึ้นในกิจกรรมของฉัน ฉันไม่สามารถเข้าถึงได้จากเธรดพื้นหลัง อย่างไรก็ตาม ฉันไม่ได้พบวิธีง่ายๆ ในการทำเช่นนี้นอกเหนือจากการสร้าง Handler Thread แบบกำหนดเองของฉันเอง แต่นั่นดูเหมือนจะเป็นวิธีที่ยุ่งยากในการทำ
ฉันขาดอะไรบางอย่างที่นี่หรือไม่มีวิธีใดที่จะดีไปกว่านี้ในการเข้าถึงวัตถุ Realm จากภายในเธรดต่างๆ
อัปเดต:
ฉันเจาะลึกลงไปอีกเล็กน้อยเพื่อดูว่าใน IntentService เมธอด onHandleIntent ทำงานในเธรดที่แยกจากวิธีอื่นภายในคลาส ดังนั้นฉันจึงไม่สามารถสร้างอินสแตนซ์ Realm ระดับคลาสได้และสามารถโต้ตอบกับสิ่งนั้นทั้งภายในและภายนอกเมธอด onHandleIntent ได้ นั่นคือสิ่งที่ทำให้เกิดข้อยกเว้นของเธรด นอกเหนือจากการสร้าง Realm แยกกันในแต่ละวิธีที่ฉันต้องเข้าถึงวัตถุและเรียกค้นมันซ้ำแล้วซ้ำเล่า ฉันคิดว่าคำตอบของ Ilya Tretyakov จะดีที่สุด ฉันสามารถคัดลอกอ็อบเจ็กต์จากขอบเขตในตัวสร้างของฉัน จากนั้นจึงทำงานกับวัตถุนั้นได้ตลอดอายุของบริการ วิธีการใดๆ ที่ต้องเขียนกลับไปยังออบเจ็กต์ Realm จะต้องสร้างอินสแตนซ์ Realm ของตนเองภายในวิธีการนั้น
MyObject obj = mRealm.where(MyObject.class).equalTo("id", 123).findFirst()
เมื่อคุณเปลี่ยนobj
ในบริการ กิจกรรมในกิจกรรมจะถูกเปลี่ยนโดยอัตโนมัติในวง UI ถัดไป คุณสามารถใช้ความตั้งใจในการส่งคีย์หลักระหว่างกัน ดู realm.io/docs/java/latest/#threading และ realm.io/docs/java/latest/#intents - person beeender   schedule 19.02.2016