2014-10-04 6 views
6

मैं एक एंड्रॉइड ऐप बनाने की कोशिश कर रहा हूं जो बार-बार हर 10 मिनट में कुछ प्रक्रिया चलाएगा। जैसा कि मैंने पाया है Handlers टाइमर या शेड्यूलिंग से अधिक विश्वसनीय हैं। तो मैं नीचे दिए गए कोड का उपयोग कर Handlers का उपयोग करके अपना ऐप विकसित करने जा रहा हूं।बार-बार कार्य के लिए एंड्रॉइड हैंडलर - क्या यह ओवरलैप होगा? टाइमर-कार्य वीएस हैंडलर वीएस अलार्म-मैनेजर

मैं थोड़ा चिंतित है कि नीचे कोड अलग हर बार मैं अनुप्रयोग शुरू करने और उन्हें समानांतर चालू रखने पर Handlers पैदा करेगा हूँ, के बाद से मैं onCreate पर Handler बना रहा हूं हो सकता है।

तो एक समय में पृष्ठभूमि में केवल एक ही Handler रन रखने का सबसे अच्छा तरीका क्या है?

private Handler handler; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    handler = new Handler(); // new handler 
    handler.postDelayed(runnable, 1000*60*10); // 10 mins int. 
    setContentView(R.layout.activity_pro__sms); 
} 

private Runnable runnable = new Runnable() { 
    @Override 
    public void run() { 
     /* my set of codes for repeated work */ 
     foobar(); 
     handler.postDelayed(this, 1000*60*10); // reschedule the handler 
    } 
}; 
+0

बस सोच रहा है: आपके 'दोहराए गए काम' का संदर्भ क्या है? या शायद बेहतर कहा: यह किस तरह का ऐप है? यह सोचने के लिए एक बहुत ही उदार धारणा हो सकती है कि उपयोगकर्ता एक समय में 10+ मिनट के लिए सक्रिय रूप से आपके ऐप का उपयोग करेंगे (जब तक कि यह एक गेम की तरह न हो, इसलिए मेरा प्रश्न)। अग्रभूमि में आपका ऐप * नहीं * होने पर 'हैंडलर' का उपयोग करना, कार्रवाई का सही तरीका नहीं हो सका। –

+0

सेवा का उपयोग क्यों नहीं करें? –

+0

मुझे नींद मोड में भी चलकर कार्य को याद करने की आवश्यकता नहीं है। निष्क्रिय (नींद) मोड में भी सेवाएं सक्रिय हो सकती हैं? या मुझे जागने की ताला लगाने की ज़रूरत है। AlarmManager की तुलना में सेवाओं द्वारा संसाधन उपयोग के बारे में क्या है (अब मैं अलार्म मैनेजर के साथ चीजों की कोशिश कर रहा हूं) –

उत्तर

4

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

एंड्रॉइड के समय के लिए कुछ विकल्प हैं।

  1. टाइमर-कार्य -> ​​एप्लिकेशन लाइव होने पर चलता है। अल्पकालिक समय के लिए सबसे अच्छा। संसाधन का उपयोग अधिक है।

  2. हैंडलर -> एप्लिकेशन लाइव होने पर चलता है। लेकिन शेड्यूलर के रूप में उपयोग करने के लिए उपयुक्त नहीं है। (यही वह है जो मैंने पूछा है और ऐसा करने का सही तरीका नहीं है)। Handlers ऐप की हत्या होने तक बार-बार कुछ करने का सबसे अच्छा तरीका है।

  3. अलार्म-मैनेजर -> भविष्य में कुछ होने के लिए शेड्यूल करने का सबसे अच्छा तरीका, भले ही ऐप मारा गया हो। (यही वह है जो मुझे अपने ऐप के लिए आवेदन करना चाहिए)।

यही मुझे पता चला है। यदि मैं गलत हूं तो मुझे सही करों।

+4

यह गलत है। एक हैंडलर बस एप्लिकेशन थ्रेड पर कार्यों को शेड्यूल करता है। जब आवेदन मारे जाते हैं तो हैंडलर कार्य मर जाता है। –

+0

तो "पोस्टडेलेड (रननेबल, लांग)" विधि को कॉल करते समय क्या होता है। क्या यह ऐप थ्रेड को जीवंत रखेगा ताकि यह रननेबल ट्रिगर कर सके। –

+2

नहीं! देरी की घटना, बस, कभी नहीं होगा। –

3

आप एप्लिकेशन कक्षा का विस्तार कर सकते हैं और इसमें अपना काम कर सकते हैं।

public class App extends Application { 

    private Handler handler; 

    @Override 
    protected void onCreate() { 
     super.onCreate(); 
     handler = new Handler(); // new handler 
     handler.postDelayed(runnable, 1000*60*10); // 10 mins int. 
     setContentView(R.layout.activity_pro__sms); 
    } 

    private Runnable runnable = new Runnable() { 
     @Override 
     public void run() { 
      /* my set of codes for repeated work */ 
      foobar(); 
      handler.postDelayed(this, 1000*60*10); // reschedule the handler 
     } 
    }; 
} 

और मेनिफेस्ट में अपने वर्ग की घोषणा:

<application android:name=".App"> 

संपादित

लेकिन केवल कि आपके ऐप में चल रहा है यह कारगर होगा, अन्यथा आप AlarmManager उपयोग कर सकते हैं।

+0

धन्यवाद। मैं इसे आज़मा दूंगा और कुछ मिनटों में आपको जवाब दूंगा। –

+0

वास्तव में जो मैं चाहता हूं वह कई हैंडलर बनने से रोकना है। एंड्रॉइड डेवलपर्स साइट में एक तरीका होना चाहिए, वे कहते हैं कि हैंडलर सबसे उपयुक्त तरीका है। –

+2

क्या वांग ने आपको केवल एक हैंडलर बनाया होगा, और पारित समय के आधार पर प्रक्रिया दोहराएं। ध्यान दें कि वह एप्लिकेशन क्लास का विस्तार कर रहा है, जिसे केवल एक बार बुलाया जाता है, यानी, जब आपका एप्लिकेशन बनाया जाता है (जब आप एप्लिकेशन शुरू करते हैं)। यदि आप पूरी तरह से एप्लिकेशन को नष्ट कर देते हैं तो हैंडलर काम करना बंद कर देगा, अन्यथा, केवल एक ही समय में ही चलाएगा। यदि आप लगातार चलने के लिए हैंडलर की तलाश में हैं, तो उपरोक्त वर्णित अलार्ममेनर का उपयोग करें। – NightwareSystems

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