2017-01-11 6 views
6

मेरा ऐप UIBackgroundMode का उपयोग करता है, यानी आईओएस द्वारा इसे फिर से लॉन्च किया जाता है जब ऐप सक्रिय नहीं होने पर भी ब्लूटूथ घटनाएं होती हैं। इसलिए आईओएस द्वारा पृष्ठभूमि कतार पर ब्लूटूथ इवेंट भेजे जाते हैं (कतार मेरे द्वारा निर्दिष्ट है)।ऐप पृष्ठभूमि में पुन: लॉन्च होने पर मुख्य कतार प्रेषित हो जाती है?

कर सकते हैं मैं तथापि प्रेषण कोड वापस मुख्य कतार में, यानी

DispatchQueue.main.async { } (स्विफ्ट)

dispatch_async(dispatch_get_main_queue(), ^{ }) (ऑब्जेक्टिव-सी)

और कहा कि अपनी दौड़ पाश चल रहा है मान लेते हैं, वह यह है कि मेरी ब्लॉक प्रेषित हो जाते हैं? या पृष्ठभूमि मोड में निलंबित मुख्य कतार है और इस प्रकार मुझे इसे प्रेषण ब्लॉक जोड़ने से बचना चाहिए?

+0

क्या आपने ऐसा करने की कोशिश की है। –

+0

मैंने एक प्रयोग किया जहां आईओएस मुख्य लूप चलाने के लिए प्रतीत होता है क्योंकि ऐप को पृष्ठभूमि मोड में लॉन्च होने पर ब्लॉक निष्पादित किया जाता है। हालांकि मैं यह नहीं मान सकता कि आईओएस _always_ इस तरह व्यवहार करेगा। यदि यह मुख्य लूप को जारी रखना जारी रखेगा, तो यह मेरे ऐप के लिए चीजों को अधिक आसान बना देगा क्योंकि तब मुझे थ्रेड सिंक्रनाइज़ेशन की आवश्यकता नहीं है क्योंकि जब आवश्यक हो तो मैं मुख्य कतार में भेजता हूं। –

उत्तर

3

पृष्ठभूमि में रहते हुए मुख्य कतार में प्रेषण करना सुरक्षित होना चाहिए।

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

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

स्रोत: पृष्ठभूमि वाले ऐप्स से निपटने का एक दुर्भाग्यपूर्ण अनुभव।

+0

क्या आप वाकई 10 मिनट के बारे में सुनिश्चित हैं? प्रलेखन का कहना है कि निलंबित होने से पहले पृष्ठभूमि मोड में स्विच करते समय ऐप्स में 10 _seconds_ होते हैं। –

+1

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

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