2017-01-05 7 views
6

मेरा ऐप पृष्ठभूमि स्थान अपडेट (विशेष रूप से महत्वपूर्ण स्थान निगरानी के साथ) का समर्थन करता है।जब आईओएस ऐप पृष्ठभूमि में लॉन्च किया गया है तो मुझे UI से बचाना चाहिए

क्या मुझे लगता है कि ऐप पृष्ठभूमि में है (application.applicationState == UIApplicationStateBackground) जब मुझे लगता है कि लोडिंग से UI (नियंत्रकों के माध्यम से) को रोकने की आवश्यकता है?

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

उदाहरण के लिए (ObjC में है, लेकिन सवाल स्विफ्ट के लिए भी है),, मान लीजिए कि मैं कुछ RootViewController जो initializes और पूरे नियंत्रक/दृश्य पदानुक्रम धारण करते हैं मैं, viewDidLoad में करना चाहिए:

if ([UIApplication sharedApplication].applicationState == UIApplicationStateBackground) { 
    // Root view controller loaded while in background, so doing only background stuff 
    [self justDoBackgroundStuffWithoutUI]; 
} else { 
    // Root view controller loaded normally, so loading normal UI 
    [self initializeUIAndChildControllers]; 
} 

? या मुझे उन सभी यूआई कार्यों को अनदेखा करने के लिए आईओएस को "भरोसा" करना चाहिए, क्योंकि यह पता होगा कि यह पृष्ठभूमि स्थिति में है?

+2

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

+0

दूसरा सोचा तो क्या होगा यदि मेरे नियंत्रक उदाहरण के लिए अपने 'viewDidLoad' पर स्वचालित रूप से कई छवियां डाउनलोड करते हैं - कि, मैं अनुमान लगा रहा हूं, ओएस द्वारा अनदेखा नहीं किया जाएगा। हो सकता है कि 'UIImageView'a प्रस्तुत नहीं किया जाएगा, लेकिन डेटा और' UIImage 'वास्तव में लोड किया जाएगा। – mllm

+0

उस स्थिति में नेटवर्क अनुरोधों को अभी भी पूरा करना चाहिए, लेकिन जब किसी भी शेष कार्यों की पृष्ठभूमि की पृष्ठभूमि होती है तो निलंबित/समाप्त होने से पहले जो कुछ भी कर रहे हैं, उसे पूरा करने के लिए केवल सीमित समय होता है। यह सिर्फ अनिश्चितता से नहीं चल रहा है। – Scriptable

उत्तर

4

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

1

पृष्ठभूमि में यूआई अपडेट करना अनावश्यक और भ्रमित और गैर-कुशल है।

  • अनावश्यक क्योंकि उपयोगकर्ता के लिए कोई अतिरिक्त मूल्य नहीं है जो ऐप का उपयोग नहीं कर रहा है। देखने में चीजों का एक सरल कामविलपियर पर्याप्त होगा।
  • उलझन में है क्योंकि उपयोगकर्ताओं को स्क्रीन को दिखाई देने के रूप में खुद को बदलने की उम्मीद हो सकती है, मुझे आपके ऐप के बारे में पता नहीं है, लेकिन यह एक व्यापारिक विकल्प है। हो सकता है कि आपके पास जीमेल/व्हाट्सएप जैसे परिवर्तनों को प्रदर्शित करने के तरीके में कुछ समान हो और आप चाहते हैं कि उपयोगकर्ता नए ईमेल/संदेश देखें।
  • गैर-कुशल क्योंकि आप बस कुछ बैटरी उपभोग कर रहे हैं। आपने "भारी यूआई लोडिंग" भी कहा था। यदि स्थान बार-बार बदलता है तो क्या होता है? क्या परिवर्तन इस अर्थ में ओवरराइड हो सकते हैं कि वे अब आवश्यक नहीं हैं या आपको हमेशा बिना किसी बदलाव की आवश्यकता होगी।

संक्षेप में: मैं यह नहीं कह रहा हूं कि कोई यूआई अपडेट न करें, हर ऐप में एक मीठा स्थान होता है। शायद आपको उनमें से अधिकतर करने की ज़रूरत नहीं होगी और बदलावों को आलसी लोड करना होगा यानी लोडिंग स्क्रीन पर बेहतर तरीका प्रतीत होता है। हालांकि मुझे यकीन है कि कुछ उन्नत दिशानिर्देश हैं जिन्हें मैं अनजान हूं। उम्मीद है कि अन्य जवाब आएंगे।

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