दिलचस्प पोस्ट
रूबी 1.9 Array.to_s अलग ढंग से व्यवहार करता है? कैसे सी # का उपयोग डिफ़ॉल्ट वेब ब्राउज़र को खोजने के लिए? sed – `एस के लिए अज्ञात विकल्प ' AsyncTask में progressDialog कृपया इसके बारे में समझाएं: insertable = false, updatable = false क्या मुझे डीटीओ ऑब्जेक्ट्स में एंटिटी (पर्सिस्टेंट) ऑब्जेक्ट्स को बदलना चाहिए? कैसे गतिशील रूप से संलग्न घटना श्रोता मौजूद है या नहीं? वेबक्लाइंट बनाम एचटीटीपी वेबबैंक / एचटीटीपी वेब रिस्पांस फोनगैप – लैंडस्केप अभिविन्यास को मजबूर करना पाठ के बजाय स्लाइडिंगटैबलेआउट के लिए आइकन जोड़ें PHP में फैक्टरी डिजाइन पैटर्न क्या है? ट्रेन मार्गों के लिए सबसे अच्छा डाटा संरचना का चयन करें? बाइनरी स्ट्रिंग को दशमलव में कनवर्ट करने के लिए कैसे? System.Type और System.RuntimeType में सी # में क्या अंतर है? PHP का उपयोग करने वाले क्लाइंट का मैक एड्रेस कैसे प्राप्त करें?

पृष्ठभूमि पर NSTimer IS काम कर रहा है

मैं इसे बिल्कुल नहीं समझता, लेकिन मेरे ऐप में NSTimer निश्चित रूप से पृष्ठभूमि में चल रहा है। मेरे पास टाइमर द्वारा चलाए जा रहे मेहोड में एनएसएलॉग है और यह पृष्ठभूमि में है, जबकि प्रवेश कर रहा है। यह आईओएस 4.2.1 के साथ आईफोन 4 पर है मैंने Info.plist में स्थान पृष्ठभूमि समर्थन की घोषणा की है।

मैंने यहां और कहीं और दस्तावेज़ों और कई चर्चाओं को पढ़ा और यह संभव नहीं होना चाहिए। क्या यह एक आईओएस बग है? या अनुपयुक्त सुविधा? मैं इसका इस्तेमाल नहीं करना चाहता और नजदीकी भविष्य में पता लगाएगा, उदाहरण के लिए IOS 4.3 आने से एप्पल चुपचाप "तय किया" और ऐप काम नहीं करेगा।

क्या किसी को इसके बारे में अधिक पता है?

Solutions Collecting From Web of "पृष्ठभूमि पर NSTimer IS काम कर रहा है"

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

इस प्रणाली में कई छेद हैं जो ऐप को चलाने के लिए अधिकृत होने पर अनुमति नहीं देता है। इसे रोकने के लिए ओएस के लिए बहुत महंगा होगा लेकिन आप इस पर भरोसा नहीं कर सकते

पृष्ठभूमि निष्पादन मोड में होने पर आपके पास एक टाइमर आग हो सकती है। कुछ चालें हैं:

  • आपको beginBackgroundTaskWithExpirationHandler साथ पृष्ठभूमि निष्पादन में ऑप्टिमाइज़ करने की आवश्यकता है beginBackgroundTaskWithExpirationHandler
  • यदि आप पृष्ठभूमि थ्रेड पर NSTimer बनाते हैं, तो आपको मैन्युअल रूप से मैन्युअल रूप से इसे जोड़ने की आवश्यकता है।

 - (void)viewDidLoad { // Avoid a retain cycle __weak ViewController * weakSelf = self; // Declare the start of a background task // If you do not do this then the mainRunLoop will stop // firing when the application enters the background self.backgroundTaskIdentifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ [[UIApplication sharedApplication] endBackgroundTask:self.backgroundIdentifier]; }]; // Make sure you end the background task when you no longer need background execution: // [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTaskIdentifier]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // Since we are not on the main run loop this will NOT work: [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(timerDidFire:) userInfo:nil repeats:YES]; // This is because the |scheduledTimerWithTimeInterval| uses // [NSRunLoop currentRunLoop] which will return a new background run loop // which will not be currently running. // Instead do this: NSTimer * timer = [NSTimer timerWithTimeInterval:0.5 target:weakSelf selector:@selector(timerDidFire:) userInfo:nil repeats:YES]; [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode]; // or use |NSRunLoopCommonModes| if you want the timer to fire while scrolling }); } - (void) timerDidFire:(NSTimer *)timer { // This method might be called when the application is in the background. // Ensure you do not do anything that will trigger the GPU (eg animations) // See: http://developer.apple.com/library/ios/DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4-SW47 NSLog(@"Timer did fire"); } 

टिप्पणियाँ

  • ऐप्स को केवल ~ 10 मिनट का पृष्ठभूमि निष्पादन प्राप्त होता है – इसके बाद टाइमर फायरिंग को रोक देगा।
  • आईओएस 7 की तरह जब डिवाइस लॉक हो जाता है तो यह अग्रगणित ऐप को लगभग तुरंत निलंबित कर देगा। आईओएस 7 एप लॉक होने के बाद टाइमर नहीं आ जाएगा।