2012-12-18 33 views
6

मेरे पास गेमस्टेट मैनेजर सिंगलटन है जो मैं अपनी सभी गतिविधियों के लिए उपलब्ध करना चाहता हूं। विशेष रूप से मैं चाहता हूं कि ईवेंट ईवेंट के बजाय ईवेंट कॉन्टेक्स्ट का उपयोग करके ईवेंट मैनेजर के साथ ईवेंट को निकाल दिया जाए।RoboGuice 2.0 के साथ एंड्रॉइड ऐप - एप्लिकेशन संदर्भ के साथ सिंगलटन इंजेक्ट कैसे करें

GameStateManager सिंगलटन एनोटेशन

मैं Application.OnCreate दौरान GameStateManager इंजेक्षन करने की कोशिश की के साथ चिह्नित है (क्षमा करें, स्मृति, कॉपी और पेस्ट की नहीं से नीचे टुकड़ा आपके द्वारा लिखा गया है, तो गलत हो सकता है)

public void OnCreate(){ 
    GameStateManager gameStateManager = RoboGuice.InjectMembers(this.getApplicationContext(), new GameStateManager()) 

} 

मैंने सोचा कि GameStateManager का उदाहरण एप्लिकेशन संदर्भ के साथ बनाया जाएगा और चूंकि इसे सिंगलटन के रूप में एनोटेट किया गया है, इसलिए आवेदन संदर्भ के साथ बाद में उपलब्ध होगा। मैंने जो देखा वह यह था कि जब मैंने गेमस्टेट मैनेजर को एक गतिविधि में इंजेक्शन दिया, तो मुझे वास्तव में गतिविधि संदर्भ से जुड़ा एक नया सिंगलटन मिला। तो संक्षेप में मेरे पास 2 सिंगलेट हैं :)

एप्लिकेशन संदर्भ से जुड़ा एक वास्तविक 'सिंगलटन' कैसे है इस पर कोई विचार है?

धन्यवाद!

उत्तर

0

के बाद से RoboGuiceके तहत बनाया गया है Guice आप @Singelton एनोटेशन जो एक उदाहरण की गारंटी का उपयोग करने के प्रति Injector

example application

+1

मैंने कोशिश की, और यह काम नहीं किया। अगर मुझे गलत नहीं लगता है, तो ContextSingleton आपको प्रति सिंगलटन नहीं देता है, जो वास्तव में अनुभव है जो मैं सिंगलटन के साथ देख रहा हूं और – Erds

+0

जावाडोक का कहना है कि यह संदर्भ के लिए सिंगलटन होना चाहिए। अधिक खोज करने जा रहे हैं। तो अब तक इस जवाब को हटा दें। –

+0

हटाने के लिए स्वतंत्र महसूस करें, मेरे पास वह विकल्प नहीं है – Erds

1

मुद्दा आप का पालन करने के एक नजर डालें आलसी आरंभीकरण के कारण हो सकता कोशिश कर सकते (https://code.google.com/p/google-guice/wiki/Scopes देखें) विकास मोड में।

यदि आप किसी गतिविधि में पहले अपने प्रबंधक को इंजेक्ट करते हैं, तो यह उस बिंदु पर आलसी रूप से बनाया गया है। चूंकि Activity किसी भी @Inject Context के लिए संतुष्ट है, गतिविधि इंजेक्शन दी गई है। यह वास्तव में बहुत हानिकारक है, क्योंकि यदि आपके प्रबंधक को @Singleton के साथ एनोटेट किया गया है, तो यह गतिविधि से अधिक समय तक रहता है और आपने मूल रूप से केवल स्मृति रिसाव बनाया है।

मैं मैं क्या जहां इंजेक्ट किया जा करने के लिए (आमतौर पर Activity@ContextSingleton के लिए की, सादे @Singleton के लिए Application की) उम्मीद पर निर्भर करता है @InjectApplication या Activity करने के लिए इसे अधिक स्पष्ट मिल गया।