डेवलपर साइट पर एंड्रॉइड सेवाओं पर उपलब्ध अधिकांश दस्तावेज पढ़ने और यहां स्टैक ओवरफ्लो में पढ़ने के बाद, मैं अभी भी एक अलग कार्य में सेवा चलाने के कई पहलुओं से उलझन में हूं। उम्मीद है कि कोई मुझे सही रास्ते पर रख सकता है।एंड्रॉइड सेवा में लंबे समय तक चलने वाले पृष्ठभूमि कार्य को कैसे शुरू करें
मान लीजिए कि हम trival सेवा रूपरेखा है इस तरह के
public class HliService extends Service {
@Override
public void onCreate() {
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// If we get killed, after returning from here, restart
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
// We don't provide binding, so return null
return null;
}
@Override
public void onDestroy() {
}
}
के रूप में और प्रकट में, मैं
<service android:name=".HliService" android:process=":HLI_Comms"/>
ताकि सेवा का स्वयं का धागा में चलता चला रहे हैं।
सेवा का उद्देश्य एक पृष्ठभूमि कार्य प्रदान करना है जो एक टीसीपी सॉकेट का उपयोग करके डिवाइस पर संवाद करेगा और कुछ अन्य सामान करेगा। बैटरी मुद्दों आदि को अनदेखा करने के जोखिम पर, मूल रूप से मैं इसे हमेशा के लिए चलाने के लिए चाहता हूँ।
// Method that communicates using a TCP socket, and needs to send
// information back to the activity and receive messages from activity
// not shown here.
private void dummytask() {
boolean keepGoing = true;
while (keepGoing) {
// do useful stuff in here
// sets keepGoing false at some point
}
stopSelf();
}
इस विधि/कार्य आरंभ करने के लिए सबसे अच्छा तरीका क्या है की तरह कुछ?
मैंने डेवलपर साइट में कोड देखा है जो एक संदेश हैंडलर और एक लूपर का उपयोग करता है, जिसे मैं केवल आंशिक रूप से समझता हूं, लेकिन यह बहुत जटिल लगता है और शायद मुझे इसकी आवश्यकता है?
मुझे विश्वास नहीं है कि मैं इस विधि को onCreate()
या onStartCommand()
से कॉल कर सकता हूं तब से सिस्टम से आने पर पूरा नहीं होगा? क्या मुझे इसे टाइमर या अलार्म से शुरू करना चाहिए?
मुझे गुई गतिविधि के साथ संवाद करने के लिए एक संदेश हैंडलर जोड़ने की आवश्यकता होगी, लेकिन चूंकि मैं एक और धागे में सेवा शुरू कर रहा हूं (मैनिफेस्ट "प्रक्रिया" निर्देश के आधार पर), क्या मुझे इसके बजाय एआईडीएल का उपयोग करने की आवश्यकता है ?
मैंने सेवा विस्तार करने के बजाए ऐन्सच टास्क का उपयोग करने पर भी ध्यान दिया है, लेकिन यह एक कार्य चलाने और फिर समाप्त करने के लिए बेहतर अनुकूल लगता है।
'जबकि (keepGoing)' - अगर यह किसी अन्य थ्रेड में है जो 'रखने के लिए' रखता है, तो 'रखने के लिए' रखना चाहिए 'रखना' होना चाहिए - जावा मेमोरी मॉडल –
पर पढ़ें कृपया यह उत्तर देखें यह आपकी मदद कर सकता है । [कड़ी यहाँ विवरण दर्ज] [1] [1]: http://stackoverflow.com/a/13783477/2165080 –