2013-01-02 13 views
12

WakefulIntentService के बारे में स्टैक ओवरफ्लो में सवालों के जवाब के बाद मैं थोड़ा उलझन में हूं। मैं यह सुनिश्चित करने के लिए बस इस विषय पर कुछ ज्ञान प्राप्त करना चाहता हूं कि मेरी समझ सही है, अगर मैं गलत हूं, तो कृपया मुझे सही करने के लिए स्वतंत्र महसूस करें।सेवा, वेक लॉक

मैंने एक छोटा सा एप्लीकेशन बनाया, जहां मैं पृष्ठभूमि Service का उपयोग कर रहा हूं जो उपयोगकर्ता मोबाइल को हिलाते समय संगीत बजाता रहता है। डिवाइस लॉक होने के बाद मैंने परीक्षण किया और स्क्रीन बंद हो गई और यह अपेक्षा के अनुसार काम करता है।

  1. मैं क्या this forum से सुन रहा हूँ, सेवा को बंद कर सकता जैसे ही डिवाइस सो को जाता है। क्या यह सच है? मेरे मामले में, यह हमेशा काम करता है, क्या मुझे कुछ याद आ रहा है?

  2. WakeFulIntentService की आवश्यकता क्या है? हमें WakefulIntentService का उपयोग करने की आवश्यकता कब होगी?

  3. मैंने Service में टाइमर चलाने का प्रयास किया, हालांकि डिवाइस लॉक हो गया है और स्क्रीन बंद है और मेरा टाइमर काफी चल रहा है, मैं निश्चित रूप से कह सकता हूं। क्योंकि जब भी मेरा टाइमर ट्रिप करता है तो मुझे अधिसूचना मिलती थी।

उत्तर

16

मैं इस मंच से क्या सुन रहा हूँ, सेवा को बंद कर सकता जैसे ही डिवाइस सो को जाता है। क्या यह सच है?

हां।

मेरे मामले में, यह हमेशा

तब काम करता है अपने डिवाइस पर कुछ और ही सोते से डिवाइस बना रहा हो। WakeLocks क्या देखने के लिए शायद adb shell dumpsys power का उपयोग करें।

WakeFulIntent सेवा की क्या आवश्यकता है? हमें WakefulIntentService का उपयोग करने की आवश्यकता कब होती है?

यदि डिवाइस निष्क्रिय है और डिवाइस जागृत नहीं हो रहा है तो डिवाइस सो सकता है। डिवाइस को जागने के लिए WakeLock का उपयोग यह सुनिश्चित करने के लिए किया जाता है। ट्रांजैक्शनल-प्रकार के काम के लिए (उदाहरण के लिए, फ़ाइल डाउनलोड करना), WakefulIntentService डिवाइस को जागने के लिए और WakeLock को जोड़ता है (और केवल आवश्यकतानुसार) अपेक्षाकृत आसान है।

WakefulIntentService उन सेवाओं के साथ उपयोग के लिए उपयुक्त नहीं है जिन्हें अनिश्चित काल तक चलाने की आवश्यकता है, जैसे संगीत खिलाड़ी। उन लोगों के लिए, अपना खुद का WakeLock प्रबंधित करें।

+0

मैं अपने टाइमर को हमेशा चलने के लिए अपनी सेवा में एक धागा फैला रहा हूं। मैं धागे की रन विधि के अंदर टाइमर शेड्यूल कर रहा हूँ? डिवाइस को लॉक होने के बावजूद टाइमर जीवित है या नहीं। मैंने दो अलग-अलग उपकरणों पर परीक्षण किया और यह ठीक काम किया। जैसा कि मैं समझता हूं, निष्पादन पूरा हो जाने के बाद इरादा सेवा मार दी जाएगी। जब भी उपयोगकर्ता मोबाइल हिलाता है, मैं मानदंडों के आधार पर उपयोगकर्ताओं को सतर्क करने की ज़रूरत है, तो मैं हमेशा उपयोगकर्ता गतिविधियों को सुनने के लिए पृष्ठभूमि में एक प्रक्रिया चलाना चाहता हूं। मेरा मानना ​​है कि जैसे ही मैं डिवाइस को लॉक करता हूं और स्क्रीन बंद हो जाती है, डिवाइस नींद मोड में बदल जाता है। –

+1

@ रमेश: "जब भी उपयोगकर्ता मोबाइल हिलाता है, मैं उपयोगकर्ताओं को मानकों के आधार पर सुनने के लिए पृष्ठभूमि में एक प्रक्रिया चलाना चाहता हूं, मुझे मानदंडों के आधार पर उपयोगकर्ताओं को सतर्क करने की आवश्यकता है" - आपको एक ' वेक लॉक ने उपयोगकर्ता के बैटरी जीवन के लिए इसी तरह के नुकसान के साथ लगातार अधिग्रहण किया। आपके उपयोगकर्ता आपको Play Store पर कम रेटिंग के साथ पुरस्कृत करेंगे। – CommonsWare

+1

आपको बग करने के लिए खेद है, कैसे जीमेल, फेसबुक, लिंक्डइन मेल को सिंक करता है या स्वचालित रूप से हर एक्स मिनट अपडेट करता है? क्या वे वेक लॉक का भी उपयोग करते हैं? या क्या हमारे पास कुछ और है जो एक प्रक्रिया को हमेशा चलाने के लिए कुशल है? –

6

मैंने एक ऐप में नीचे दिए गए कोड का उपयोग किया।

सुनिश्चित करें कि आपकी सेवा चिपचिपा है:

private WakeLock wl; 

PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE); 
    wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "whatever"); 
    wl.acquire(); 

अपने मेनिफ़ेस्ट में अनुमतियों को न भूलें:

@Override 
public int onStartCommand(Intent intent, int flags, int startId) 
{ 
    //this service will run until we stop it 

    return START_STICKY; 
} 

मैं आप अपने फोन लगातार जाग यू नीचे इस कोड का उपयोग कर सकते हैं होना चाहता हूँ ।

<uses-permission android:name="android.permission.WAKE_LOCK" /> 
+5

सेवा के कौन से कार्यों में आप "अधिग्रहण" और "रिलीज" कॉल डालने की सलाह देते हैं? और क्या होगा यदि सेवा एक इरादा सेवा है? –

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