2011-10-07 14 views
13

नहीं कहा जाता है, मैं एक ऐसी सेवा बनाने की कोशिश कर रहा हूं जो पृष्ठभूमि में फ़ाइल I/O को संभालेगा। डेटा अपडेट करने वाली गतिविधियां सेवा से जुड़ जाएंगी और I/O करने के लिए सेवा के तरीकों को कॉल करेंगी। मैं मार्गदर्शन के लिए एंड्रॉइड दस्तावेज का उपयोग कर रहा हूँ।एंड्रॉइड सर्विस कभी शुरू नहीं होता है - ऑनस्टार्ट कमांड() को

मेरी सेवा शुरू नहीं करना चाहती है, हालांकि। मेरे गतिविधि की विधि OnCreate() में, मेरे पास है:

Intent smsIntent = new Intent(this, SurveyManagerService.class);  
String surveyFilename = getIntent().getStringExtra("surveyFilename"); 
System.out.println(startService(smsIntent)); //testing if it starts 
SurveyManagerServiceConnection connection = new SurveyManagerServiceConnection(); 
sms = connection.getSurveyManagerService(); 

लाइन पर 3 LogCat एक ComponentInfo वस्तु आउटपुट, तो यह लगता है कि सेवा बनाई गई है; हालांकि, एसएमएस शून्य है। इसके अलावा, SurveyManagerService onStartCommand() विधि कभी नहीं कहा जा रहा है:

@Override 
public int onStartCommand(Intent intent, int flags, int startId) 
{ 
    System.out.println("starting service"); 
    Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show(); 
    openSurveyFromIntent(intent); 
    return START_REDELIVER_INTENT; 
} 

मैं LogCat में किसी भी "शुरू करने सेवा" उत्पादन कभी नहीं, और न ही टोस्ट दिखाई है।

<service android:name=".SurveyManagerService" android:exported="false" android:enabled="true"> 
</service> 

मैं कुछ याद आ रही हूँ स्पष्ट:

मेरी सेवा मेरी प्रकट रूप में घोषित किया जाता है? मुझे बताएं कि समस्या का निदान करने के लिए मुझे कौन सी अन्य जानकारी प्रदान करनी चाहिए।

+0

शायद आपकी सेवा बार-बार दुर्घटनाओं में अपनी सेवा घोषित करने के लिए सुनिश्चित करें? – Reno

+0

मैं परीक्षण के बारे में कैसे जा सकता हूं कि यह ऑनस्टार्ट कमांड() की पहली पंक्ति से पहले क्रैश हो रहा है या नहीं? धन्यवाद। मैं यह कहना भूल गया था कि ऑनक्रेट() विधि में System.out.println परीक्षण भी है, जिसे कभी नहीं कहा जाता है। – Spinner

उत्तर

5

यह OnCreate() विधि has to exit लगता है इससे पहले कि सेवा वास्तव में शुरू कर सकते हैं। एक बार जब मैं getSurveyManagerService() अनुरोध हटा देता हूं, और एक बार थोड़ा सा समय बीत चुका है, तो मुझे सिस्टम.आउट संदेश प्राप्त हुए जो संकेत देते हैं कि सेवा शुरू हो रही थी।

दुर्भाग्य है कि एक और समस्या पैदा करता है: गतिविधि अपने डेटा के लिए सेवा पर निर्भर करता है, तो मैं यह निर्धारित करने के लिए कैसे गतिविधि के लिए सेवा शुरू करने के लिए प्रतीक्षा करने के लिए पैदा करने के लिए की जरूरत है।

संपादित करें: मेरा समाधान मेरे गतिविधि में मेरी ServiceConnection के एक निजी उपवर्ग बनाने के लिए किया गया था। इसके बाद मैंने गतिविधि को अपने डेटा के साथ गतिविधि प्रदान करने के लिए ऑन-सर्विस कनेक्ट() विधि को ओवरराइड किया (इस मामले में सूची दृश्य को पॉप्युलेट करना)।

18

शायद आपने गलती से एप्लिकेशन टैग के बाहर सेवा टैग रखा है? तब सेवा चुपचाप विफल हो जाती है। यद्यपि लॉग में "सेवा उद्देश्य शुरू करने में असमर्थ ..." त्रुटि होनी चाहिए।

+0

धन्यवाद, अच्छा विचार है, लेकिन ' 'टैग निश्चित रूप से' ' टैग के भीतर है। – Spinner

+0

मैनिफेस्ट में एक सेवा टैग को परिभाषित करना भूल गया। धन्यवाद –

14

AndroidManifest.xml

<application> 
    ... 
    <service android:name=".path.to.service.MyService"/> 
</application> 
संबंधित मुद्दे