2015-08-01 13 views
7

मेरे पास एक ऐसा ऐप है जो वेब सर्वर के रूप में चलता है। ऐप में एक सेवा है जो START_STICKY मैं चाहता हूं कि यह सेवा हर समय वेब सर्वर चलाने के लिए (विकल्प को इसे रोकने के लिए अधिसूचना में दिया गया है)।सेवा बंद करने पर सेवा पुनरारंभ - START_STICKY

समस्या यह है कि जब मैं अपना ऐप बंद करता हूं तो सर्वर पुनरारंभ होता है (सेटिंग्स खोना आदि)। यह ठीक रहता है लेकिन लॉगकैट दिखाता है कि यह पुनरारंभ हो रहा है।

मैं अपना ऐप फिर से खोल सकता हूं और नई सेवा से जुड़ सकता हूं, यह ठीक काम करता है। हालांकि फिर से बंद स्वाइप करना एक ही प्रभाव है।

मुझे इसे पुनरारंभ करने की आवश्यकता नहीं है।

स्टैंडर्ड सेवा कोड

private WebServerService mService; 
private ServiceConnection mConnection = new ServiceConnection() { 

    @Override 
    public void onServiceConnected(ComponentName className, 
            IBinder binder) { 
     WebServerService.MyBinder b = (WebServerService.MyBinder) binder; 
     mService = b.getService(); 
    } 

    public void onServiceDisconnected(ComponentName className) { 
     mService = null; 
    } 
}; 

public serviceStart() { 
    mIntent = new Intent(mContext.getApplicationContext(), WebServerService.class); 
    mContext.startService(mIntent); 
    mContext.bindService(mIntent, mConnection, Context.BIND_AUTO_CREATE); 
} 

सेवा प्रारंभ पर

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    super.onStartCommand(intent, START_STICKY, startId); 
    Log.d("SERVICE","Started"); 
    return START_STICKY; 
} 
+0

@fedepaol द्वारा इस जवाब पर एक नजर डालें [एंड्रॉयड पृष्ठभूमि सेवा को पुन: प्रारंभ किया जाता है जब आवेदन मार दिया जाता है] [1] [1]: http://stackoverflow.com/questions/15452935/android-background -Service-is-restarting-when-application-is-kill – Maclaren

+0

यह वह नहीं है जो मैं बाद में हूं, यह इस बारे में बात नहीं करता है कि यह फिर से शुरू हो जाए! मैं चाहता हूं कि यह भी करीब न हो।धन्यवाद हालांकि, मुझे लगता है कि यह अनइंड होने के बाद कुछ है। – RuAware

+0

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

उत्तर

6

लघु जवाब: आप नहीं कर सकते। जब सिस्टम सिस्टम मेमोरी का दावा करता है या उपयोगकर्ता हालिया ऐप्स सूची से ऐप को स्वाइप करता है तो सिस्टम द्वारा या उपयोगकर्ता द्वारा प्रत्येक एंड्रॉइड ऐप को मार दिया जा सकता है। यह एक एंड्रॉइड डिज़ाइन है और सभी ऐप्स को इसका पालन करना होगा। केवल (छोटे) सुधार आप कर सकते हैं एक Foreground service के रूप में सेवा कर रहा है:

जहां प्रणाली यह मानता है कुछ होने उपयोगकर्ता के लिए सक्रिय रूप से जागरूक स्मृति पर जब कम की हत्या के लिए एक उम्मीदवार नहीं है और इस तरह। (यह अभी भी सैद्धांतिक रूप से संभव है के लिए सेवा वर्तमान अग्रभूमि आवेदन से चरम स्मृति दबाव में मारे जाने के लिए, लेकिन व्यवहार में यह चिंता का विषय नहीं होना चाहिए।)

+1

आपकी सहायता के लिए धन्यवाद। StartForeground() उपयोगकर्ता को स्वाइप करने पर ऐप को बंद करने पर सेवा को पुनरारंभ करने से रोकता है। जो मैं बाद में था। मैं समझता हूं कि अगर स्मृति कम है तो यह पुनरारंभ होगा, जिसे मैं संभालता हूं। लेकिन यह अब तक मेरे किसी भी परीक्षण में नहीं हुआ है। – RuAware

1

उपयोग startForeground()

दोष यह है कि आप मुझे एक अधिसूचना प्रदान करनी होगी।

0

क्या आपके एंड्रॉइड पर टैग एंड्रॉइड: प्रक्रिया = "कोई नाम" उपयोगी होगा? यह सेवा आपके ऐप की एक अलग प्रक्रिया पर चलती है।

http://developer.android.com/guide/topics/manifest/service-element.html#proc

दूसरों यह अभी भी प्रणाली द्वारा समाप्त किया जा सकता है, तो मेमोरी कम द्वारा नियुक्त लेकिन यह अपने अनुप्रयोग बंद करके समाप्त नहीं करेंगे। आशा करता हूँ की ये काम करेगा।

1

जैसा कि मिमो ने कहा: आप नहीं कर सकते। स्मृति पर कम होने पर सिस्टम वास्तव में ऐप्स/सेवाओं को मार सकता है। इसके अलावा उपयोगकर्ता यह कर सकते हैं। या तो एप सेटिंग्स में बल बंद बटन या ऐप को स्वाइप करने के साथ। बंद करने के लिए स्वाइप करें बल स्टॉप की तरह है। इस तरह के ऐप को बंद करते समय ऐप/सेवा रीस्टार्ट नहीं होती है। यह ठीक है कि सिस्टम कैसे काम करता है। इसे स्वयं आज़माएं, अग्रिम कार्य हत्यारा डाउनलोड करें और उदाहरण के लिए फेसबुक को मार दें। यदि आप कुछ सेकंड बाद अग्रिम कार्य हत्यारा को पुनरारंभ करते हैं, तो आप देखेंगे कि फेसबुक फिर से चल रहा है। अब फेसबुक खोलें और इसे मारने के लिए स्वाइप फ़ंक्शन का उपयोग करें। अब कार्य हत्यारा फिर से शुरू करें। आप देखेंगे कि फेसबुक अब नहीं चल रहा है। फिर, इस तरह सिस्टम काम करता है। सेवा को अग्रभूमि सेवा के रूप में सेट करना या तो मदद करने वाला नहीं है।

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