2012-09-20 15 views
16

libGDX के साथ विकसित मेरे एंड्रॉइड ऐप में मैं Gdx.app.exit() का उपयोग करता हूं जब उपयोगकर्ता गेम से बाहर निकलने का प्रयास करता है। यह गेम को बंद कर देता है, लेकिन जब उपयोगकर्ता ऐप को पुनरारंभ करता है तो सभी Textures स्कैम्बल किए जाते हैं (ऐप का उपयोग करने के बिंदु से परे)। मैंने देखा कि यदि मैं किसी कार्य-प्रबंधक से ऐप को बंद करता हूं, तो यह ठीक से पुनरारंभ होगा।एंड्रॉइड पर Libgdx app.exit() एप्लिकेशन बंद नहीं कर रहा है

ऐसा क्यों होता है?

उत्तर

23

आपने जावा ऑब्जेक्ट्स (एप्लिकेशन प्रक्रिया के जीवन से बंधे हुए) और बनावट वस्तुओं के जीवनकाल (ओपनजीएल संदर्भ के जीवन से जुड़ा हुआ है जो गतिविधि की दृश्यता से जुड़ा हुआ है) के जीवनकाल के बीच विसंगति को फिर से खोज लिया है। ।

ऐप पर "बाहर निकलें" पर, गतिविधि समाप्त हो गई है, और एंड्रॉइड पृष्ठभूमि में प्रक्रिया को कैशिंग कर रहा है। जब आप ऐप एंड्रॉइड को "पुनरारंभ" करते हैं तो उसी प्रक्रिया में बस एक नई गतिविधि शुरू होती है। इस मामले में गतिविधि को वैध जावा बनावट ऑब्जेक्ट मिल रहा है, लेकिन ओपनजीएल संदर्भ में अंतर्निहित बाइट्स इसे "इंगित करता है" चला जाता है (चूंकि गतिविधि अब दिखाई नहीं दे रही है जब ओपनजीएल संदर्भ अमान्य है)।

फिक्स गतिविधि गतिविधि पर बनावट को फिर से लोड करना है। आपको यह सुनिश्चित करना होगा कि आपकी सभी ऑब्जेक्ट्स जिनमें बनावट हैं (और ऑब्जेक्ट जिनमें ऑब्जेक्ट्स हैं जिनमें बनावट हैं, आदि) गतिविधि जीवन चक्र से बंधे हैं। आम तौर पर इसका मतलब स्थिर चर (जो कि एप्लिकेशन लाइफसाइकिल का हिस्सा हैं) से बचने का मतलब है, लेकिन यदि आप चाहें तो ग्लोबल्स को अमान्य और पुन: प्रारंभ करने के लिए आप हुप्स के माध्यम से कूद सकते हैं।

संबंधित मुद्दे