मेरे पास एक संगीत सेवा है जो पाठ्यक्रम की पृष्ठभूमि में संगीत प्लेबैक का ख्याल रखती है, और कुछ अन्य चीजें जैसे यूआई परिवर्तनों की गतिविधियों को सूचित करना, जिन्हें कतारों को संग्रहित करना, संग्रह करना और बहाल करना, गीत रिकॉर्ड प्राप्त करना एक कर्सर के माध्यम से, और हर बार जब गीत बदलता है तो यह जारी अधिसूचना पर बिटमैप को अपडेट करने का ख्याल रखता है।डिबगिंग सेवा क्रैश
क्या समस्या है? सेवा दुर्घटनाग्रस्त लगभग हर बार जब उपयोगकर्ता ऐसा करने की कोशिश करता है..और बहुत कुछ और भी। उदाहरण के लिए, एक गीत बजाना, और फिर एक गेम खोलना सेवा को दुर्घटनाग्रस्त करता है, कभी-कभी क्रोम पर वेब ब्राउज़ करने जैसी हल्की चीजें भी इसे दुर्घटनाग्रस्त कर देती हैं।
कुछ विवरण:
1 - सेवा startService(new Intent(this, MyMusicService.class));
के माध्यम से शुरू कर दिया है, लेकिन जब उपयोगकर्ता छोड़ देता है गतिविधि मैं startForeground(mId, mNotification);
फोन एक जारी सूचना है कि आसान नियंत्रण प्रदान करता है दिखाने के लिए, और इसलिए भी क्योंकि startForeground()
सेवाओं के लिए intented है कि ऐसा करना चाहिए activityManager द्वारा इन की हत्या के रूप में प्राथमिकता के आधार पर उपयोगकर्ता अनुभव के लिए विघटनकारी होगा (अगर सेवा मार दिया जाता है संगीत बंद कर दिया जाता है)
2 जा - मैं दुर्घटना पुन: पेश करने का प्रयास किया है, और यह निश्चित रूप से जब ऐसा न करने से होता है क्रोम पर ब्राउजिंग की तरह भारी काम (यह क्रैश को लगभग 50% समय का पुनरुत्पादन करेगा), और हमेशा मंदिर चलाने की तरह चीजें करते समय 2. एफवाईआई, अगर कुछ भी नहीं कर रहा है - बस पृष्ठभूमि पर संगीत बजाना और निष्क्रिय, प्लेबैक बिल्कुल बंद नहीं होगा, और यह वैसे ही काम करता है जिस तरह से इसका इरादा है।
3 - फ़ोन जो मैं परीक्षण डिवाइस के रूप में उपयोग कर रहा हूं वह धीमा या कम-स्मृति डिवाइस किसी भी माध्यम से नहीं है, यह गैलेक्सी नेक्सस है।
4 - मैं कुछ देशांतर पकड़ने की कोशिश की है और कभी कभी यह बस का कहना है:
02-24 06:53:32.586: I/ActivityManager(387): Process com.deadpixels.light.player (pid 27720) has died.
किसी अन्य संदेशों बिना
, और कभी कभी एक ही संदेश एक WINDEATH के साथ है:
02-24 06:53:32.586: W/ActivityManager(387): Scheduling restart of crashed service com.deadpixels.light.player/.service.MyMusicService in 5000ms
02-24 06:53:32.602: W/InputDispatcher(387): channel '418d09c8 com.deadpixels.light.player/com.deadpixels.light.player.HomeActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x9
02-24 06:53:32.602: E/InputDispatcher(387): channel '418d09c8 com.deadpixels.light.player/com.deadpixels.light.player.HomeActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
02-24 06:53:32.602: W/InputDispatcher(387): Attempted to unregister already unregistered input channel '418d09c8 com.deadpixels.light.player/com.deadpixels.light.player.HomeActivity (server)'
02-24 06:53:32.602: I/WindowState(387): WIN DEATH: Window{418d09c8 u0 com.deadpixels.light.player/com.deadpixels.light.player.HomeActivity}
क्या मैं भी देखा है कि लगभग हमेशा जब दुर्घटना होता है, अन्य सेवाओं का एक बहुत "मर" है। मैं पूर्ण लॉग here संलग्न कर रहा हूं।
5 - मैं ACRA का उपयोग कर दुर्घटना के बारे में अधिक जानकारी प्राप्त करने की कोशिश की लेकिन फिर भी सब कुछ सही ढंग से सेटअप होने के लिए, दुर्घटनाग्रस्त लॉग भेजा जा रहा है, या बस कुछ नहीं होता के बाद लगता है। मैं जानता हूँ कि ACRA दुर्घटना का पता लगाता है और शुरू होता है:
02-24 06:53:37.719: D/ACRA(28293): ACRA is enabled for com.deadpixels.light.player, intializing...
02-24 06:53:37.742: D/ACRA(28293): Using default Mail Report Fields
02-24 06:53:37.742: D/ACRA(28293): Looking for error files in /data/data/com.deadpixels.light.player/files
02-24 06:53:37.742: W/ACRA(28293): com.deadpixels.light.player reports will be sent by email (if accepted by user).
लेकिन कुछ भी भेजा जा रहा है, न तो इन्हें मेल करें मैं स्थापित करने के लिए, या गूगल डॉक्स में फार्म के लिए।
सुनिश्चित नहीं है कि और क्या प्रयास करें, और मैं उम्मीद कर रहा था कि कुछ अच्छे विचारों को देखने के लिए क्या करना है। जैसा कि मैंने कहा, सेवा कुछ चीजें करता है, कि मेरे ज्ञान के लिए संसाधन-व्यापक नहीं है, और ईमानदार होने के लिए, मुझे यह भी यकीन नहीं है कि यह क्रैश होने वाली सेवा के साथ कुछ भी करना है या नहीं।
सेवा में होने वाली कई कोड बिट्स के gist और यहां एसीआरए कोड स्थापित किए गए हैं। यह ध्यान देने योग्य भी है कि मैंने अन्य संगीत खिलाड़ियों के साथ दुर्घटनाग्रस्त होने वाली सेवा को पुन: उत्पन्न करने की कोशिश की और मैंने इस मुद्दे पर बिल्कुल भी भाग नहीं लिया।
मदद के लिए धन्यवाद!
मैं वास्तव में पहले से ही onStartCommand दौरान START_STICKY लौट रहा हो जाएगा। जहां तक क्रिएट है, मैं खिलाड़ी को शुरू करता हूं, लेकिन मैं अभी तक तैयार नहीं कर सकता क्योंकि सेवा शुरू होने से पहले भी सेवा शुरू हो गई है और इसलिए मुझे पता नहीं है कि मुझे किस गीत को पारित करना चाहिए। साथ ही, जब कोई गाना बज रहा है, तो मैं स्टेटस बार अधिसूचना जोड़ता हूं, मुझे यकीन नहीं है कि क्या आपने पोस्ट की गई गड़बड़ी पर देखा है। हालांकि मैं एक वाकेलॉक प्राप्त करने में देखता हूं जिसे मैंने नहीं सोचा था क्योंकि मुझे 30 मिनट की अवधि के लिए बीजी में संगीत चलाने के बाद से फोन की आवश्यकता नहीं थी, जबकि मैं फोन का उपयोग नहीं कर रहा था। –
'गिस्ट' लिंक में, मुझे कोई 'ऑनस्टार्ट' या 'ऑनस्टार्ट कमांड' कार्यान्वयन नहीं देखा गया, इसलिए मैंने पूछा क्यों :) यदि आप सेवा के ऑनक्रेट में 'स्टार्टफ़ोरग्राउंड' कह रहे हैं, तो आंशिक वेक लॉक केवल तब उपयोगी होता है जब आप डिवाइस सोते समय भी खेलना चाहता है। जब डिवाइस सो नहीं जाता है तो 'startForeground' को सेवा की हत्या को रोकना चाहिए था। क्या आपने अपनी सेवा के प्रसारण-प्राप्तकर्ताओं में अपनी ऑनसेसिव विधि (ओं) के कार्यान्वयन की जांच की है? उन्हें जल्दी से चलना चाहिए; यदि नहीं, तो आपकी प्रक्रिया मारे जा सकती है। –
हाय, आप सही हैं, मैंने ऑनस्टार्ट कमांड शामिल नहीं किया है, मैंने अभी जोड़ा क्योंकि मैंने गिस्ट को अपडेट किया था। इसके अलावा, मैं गतिविधि छोड़ते समय केवल प्रारंभिक भूमि को कॉल करता हूं (यानी, घर जाने पर, या दूसरी गतिविधि), और फिर से शुरू होने पर रोकथाम (सत्य) को कॉल करें। जहां तक ऑनसीसीव है, सुनिश्चित नहीं है कि मैं यह देखने के लिए कैसे परीक्षण कर सकता हूं कि यह जल्दी से चलता है या नहीं। मैंने gist –