2010-06-09 6 views
10

जब से पहले बीटा बाहर आया था तब से मैं यह पता लगाने की कोशिश कर रहा हूं कि "वास्तविक" मल्टीटास्किंग संभव है या नहीं - यानी क्या आप पृष्ठभूमि में एक प्रोग्राम डाल सकते हैं और इसे अनिश्चित काल तक नेटवर्क कनेक्शन पर लटका सकते हैं?क्या आईओएस 4 तीसरे पक्ष के डेवलपर्स को "असली मल्टीटास्किंग" उपलब्ध कराता है?

मैं उदाहरण के लिए आईएम या आईआरसी ऐप्स के बारे में सोच रहा हूं। मैंने आईओएस 4 पर खुद को एक ऐप संकलित किया है, और बिना किसी बदलाव के इसे पृष्ठभूमि में चलने के लिए दिखाई दिया, लेकिन सभी के लिए मुझे पता है कि यह सिर्फ स्मृति के लिए निलंबित कर दिया गया था।

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

+2

मेरे पास 0 आईओएस अनुभव है, इसलिए यह सहायक नहीं हो सकता है। हालांकि, पृष्ठभूमि में चलते समय यह वास्तव में कुछ क्यों नहीं करता है यह देखने के लिए कि वास्तव में यह चल रहा है या नहीं (उदाहरण के लिए, प्रति सेकंड एक काउंटर अपडेट करें)? – Cam

+0

अच्छा विचार! मैं अब कोशिश कर रहा हूं ... –

+0

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

उत्तर

10

ऐसा प्रतीत होता है जवाब नहीं है। स्काइप के लिए एपीआई एक बहुत ही खास मामला है, जिसे "वीओआईपी" मोड कहा जाता है, और विशेष व्यवहार की आवश्यकता होती है, जैसे वीओआईपी के लिए उपयोग में सॉकेट को चिह्नित करना।

आप पृष्ठभूमि में अलार्म अधिसूचनाएं प्राप्त कर सकते हैं (जैसे समय बीत चुका है)। पृष्ठभूमि चलने वाले राज्य में आप कितने समय तक ओएस द्वारा सीमित रूप से सीमित हैं।

एंड्रॉइड का पृष्ठभूमि मॉडल पूरा हो गया है और कई तरीकों से बहुत अच्छा है।

ऐप्पल में "आपके अनुप्रयोगों में सहायक मल्टीटास्किंग" नामक एक गाइड है जिसे आप ढूंढने में सक्षम होना चाहिए।

+9

डेवलपर्स के साथ सौदा करने के लिए पूरी तरह से परिचालन पृष्ठभूमि मोड आसान है, लेकिन बैटरी जीवन पर क्रूर। ऐप्पल ने यह डिजाइन ट्रेडऑफ बनाया है। एक ऐप्पल क्षमाकर्ता नहीं होना चाहिए, लेकिन यदि आप किसी डेवलपर की बजाय उपयोगकर्ता की तरह सोचते हैं तो आप डिज़ाइन विकल्प को समझ सकते हैं। –

+2

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

+3

@pkulak और इसके विपरीत आप बल्लेबाज जीवन चाहते हैं जो आप चाहते हैं कि कुछ घंटों के लिए केवल अच्छा है। असली गैर-डेवलपर अंत उपयोगकर्ता, एक फोन चाहते हैं जो पूरे दिन रहता है और जो कुछ भी उन्हें चाहिए, वह परवाह नहीं करता कि यह कैसे करता है। अगर ऐसा लगता है कि आप "चाहते हैं" लेकिन ऐसा नहीं करता है कि आपको ऐसा कैसे लगता है कि यह किया जाना चाहिए, तो क्या अंतर है। –

1

आईओएस 4 एप्लिकेशन या तो या निलंबित हो सकता है। ऑपरेटिंग सिस्टम मेमोरी में जितना संभव हो उतने अनुरोधित अनुप्रयोगों को रखने की कोशिश करेगा, जबकि अन्य सभी एप्लिकेशन निलंबित कर दिए जाएंगे।

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

- PC World Multitasking on Apples iPhone 4

0

आपको this blog post में रुचि हो सकती है जो बताती है कि कैसे "मल्टीटास्किंग" आईफोन ओएस 4 और एंड्रॉइड जैसे सिस्टम में काम करता है।

+1

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

8

ऐप्पल के आईओएस 4 डेवलपर दस्तावेज़ इस सब को स्पष्ट रूप से रूपरेखा देते हैं।

जब आपका ऐप बंद हो जाता है या स्विच हो जाता है, तो यह लगभग तुरंत "निलंबित" होता है, जिसका अर्थ है कि ओएस ऐप के राज्य को फ्रीज करता है। जब उपयोगकर्ता आपके ऐप पर वापस स्विच करता है, तो आपका कोड उस स्थान पर चल रहा है जहां इसे रखा गया था। ऐसा करने के लिए अपने अनुप्रयोग के लिए किसी भी कोड जोड़ने के लिए जरूरत मत करो, बस ओएस 4. के खिलाफ यह संकलन

ऊपर ज्यादातर मामलों में सच है। "निलंबित" मॉडल लागू नहीं होने के दो कारण हैं:

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

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

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

इसे साफ़ करना चाहिए। मुझे लगता है कि यह एक मोबाइल डिवाइस पर multitasking के लिए एक सुंदर सुरुचिपूर्ण समाधान है।

1

ऐप्स के लिए पृष्ठभूमि समय का अनुरोध करना संभव है। दस्तावेज़ पढ़ें। मैं कहूंगा कि आईओएस "नियंत्रित मल्टीटास्किंग" है।

1

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

https://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

ओएस वास्तव में सीमित कर समय आप कितना हालांकि मिलता है ... यह आप जब अपने समय आप सफाई के लिए एक मौका दे रही है अच्छी तरह से निर्भर है बता देंगे कर सकते हैं।

+0

यह महत्वपूर्ण है कि आप जितना संभव हो उतना सफाई करें * पहले * पृष्ठभूमि में आगे बढ़ें। अगर फोन मेमोरी पर कम चल रहा है और आपको अपने ऐप को मारना है, तो आपको कोई चेतावनी नहीं मिलती है, आप बस मारे जाते हैं। – kubi

1

आईओएस 4 में कुछ विस्तार करने के लिए "असली" मल्टीटास्किंग है। विचार करने के लिए दो चीजें हैं:

  • यूआई इवेंट लूप एकल कार्य है। तो यूआई इवेंट लूप पर केवल फ्रंट ऐप निष्पादित होता है। कोई बड़ा सौदा नहीं: अपना मुख्य कोड फॉर्म यूआई इवेंट लूप को अलग करें (शायद आपको अपने ऐप को फिर से डिजाइन करना होगा)।
  • कुछ मानदंड पूरा होने पर ओएस "आपके" को समाप्त कर सकता है (उदा। कम स्मृति)।

वर्तमान में इनमें से एक मानदंड यह है कि निष्पादन का समय 10 मिनट तक सीमित है (वास्तविक समय सीपीयू समय नहीं है)। हालांकि मैं उम्मीद करता हूं कि यह पृष्ठभूमि ऐप समाप्ति (मुझे उम्मीद है) के लिए बेहतर मानदंडों को बदलने और देखने के लिए।

इसके अलावा आपके पास timers (event loops) in background हो सकता है।

0

वास्तव में आप ऐसा कर सकते हैं, हालांकि इसे ऐप्पल द्वारा अनुमति नहीं है। यू में उर मैक एक toolchain की स्थापना की और अधिक जानकारी

1

iOS के 4.2 भी में कोई वास्तविक मल्टीटास्किंग है के लिए कुछ अनौपचारिक एसडीके ...

जांच http://code.google.com/p/iphone-backgrounder/ का उपयोग होगा। क्योंकि ऐप्स को केवल राज्यों से संबंधित कार्य को पूरा करने की अनुमति होगी .. समय के छोटे अंतराल के लिए और फिर यह निलंबित राज्य में होगा .. यदि आप समय के लंबे अंतराल के लिए पृष्ठभूमि कार्य निर्धारित करेंगे तो ... यह अप्रत्याशित रूप से व्यवहार करेगा जब आप ऐप को कहीं से भी चलाने की कोशिश करेंगे तो कोई विधि नहीं बुलाई जाएगी ..

0

आपको उस सुविधा सेट के लिए पुश नोटिफिकेशन फ्रेमवर्क का उपयोग करना चाहिए!

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