android - एंड्रॉइड लगातार सॉकेट कनेक्शन नियम



sockets tcp (1)

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

नोट करने के लिए अतिरिक्त चीजें:

  • पिंगिंग अलार्म के लिए ब्रॉडकास्ट रिसीवर की ऑनरसीव विधि में, यदि आप सीधे सॉकेट पर कॉल नहीं कर रहे हैं (एक नया धागा या इरादा उत्पन्न करना), तो पिंग अनुरोध समाप्त होने तक आपको एक जागने की आवश्यकता होगी। एंड्रॉइड पर केवल ओक रिसीव रिटर्न तक एक वेक लॉक होता है, उसके बाद यह संभव है (लेकिन दुर्लभ) कि पिंग समाप्त होने से पहले सीपीयू सो सकता है।

  • नोटिफिकेशन संवेदनशील होने पर उच्च प्रदर्शन वाईफ़ाई लॉक का उपयोग करें।

  • एक अन्य डिवाइस विशिष्ट मुद्दा था जिसने समाधान को प्रभावित किया, यह here शामिल here

अद्यतन करें

Android 5.1 के साथ निम्न समस्या में भाग लें: एंड्रॉइड इश्यू

अद्यतन 2

एंड्रॉइड 6.0 के लिए डोज मोड के आसपास कोड करने की आवश्यकता है: मोड मोड करें

मैं लगातार सॉकेट का उपयोग कर एंड्रॉइड डिवाइस के लिए एक कस्टम पुश अधिसूचना समाधान के लिए कुछ परीक्षण कर रहा हूं। मैं अपने निष्कर्ष साझा करना और परिणामों को मान्य करना चाहता हूं।

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

टेस्ट 1:

Pinging is done using a timer at 10 second intervals.
Server sends notification every minute.
Applications acquires wifi and wake locks.
Duration : 8 hours
Battery loss : ~14%

टेस्ट 2:

Pinging is done using AlarmManager at 10 second intervals.
Server sends notification every minute.
Application acquires only a wifilock
Duration : 8 hours
Battery loss : ~7%

धारणाएं: एक आने वाली नेटवर्क पैकेट स्वचालित रूप से सीपीयू को जगाती है, इस प्रकार वेक लॉक की आवश्यकता नहीं होती है। पिंग करने के लिए अलार्ममेनगर का उपयोग करना (टाइमर के बजाए) का मतलब है कि हमें वॉकलॉक की आवश्यकता नहीं है।

उस wakelock को वास्तव में बैटरी की मदद करने लग रहा था। हैरानी की बात है कि, किसी भी समाधान पर आक्रामक पिंगिंग ने बैटरी जीवन को उतना ही प्रभावित नहीं किया जितना मैंने अपेक्षा की थी। (हमारे पास कई अन्य परीक्षण थे जिनमें एक आवेदन था जिसमें सिर्फ एक वाइफिलॉक था और उसने कुछ भी नहीं किया जो इसी अवधि में 4% से 5% बैटरी हानि का कारण बनता था)

चूंकि एप्लिकेशन सभी पिंग अनुरोधों को सफलतापूर्वक भेजने में सक्षम था और सभी आने वाले संदेशों को प्राप्त करने में सक्षम था, मुझे विश्वास है कि मेरी धारणाएं सही हैं। लेकिन मुझे किसी भी विशेषज्ञ से कुछ पुष्टि प्राप्त करना अच्छा लगेगा।

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

इसके अलावा, कृपया जीसीएम की सिफारिश न करें, इसे कंपनी नीति द्वारा अस्वीकार कर दिया गया है।

धन्यवाद।





batterylevel