applicationWillEnterForeground बनाम applicationDidBecomeActive, applicationWillResignActive बनाम applicationDidEnterBackground


215

जब कोई एप्लिकेशन पृष्ठभूमि में होने से जाग रहा हो और उसे सक्रिय करने के लिए इसे तैयार करना चाहता हो, तो उसे लागू करने के लिए कौन सा उचित प्रतिनिधि है?

applicationWillEnterForeground vs applicationDidBecomeActive - क्या अंतर है?

जब कोई एप्लिकेशन सोने जा रहा हो, तो आप उसे लागू करने के लिए उचित प्रतिनिधि हैं और आप उसे डेटा को क्लीनअप और सेव करना चाहते हैं?

applicationWillResignActive बनाम applicationDidEnterBackground - क्या अंतर है?

इसके अलावा, मैंने देखा है कि आने वाले एसएमएस या कॉल आने पर ApplicationWillResignActive को कॉल किया जाता है, लेकिन उपयोगकर्ता Ok पर क्लिक करता है और जारी रखता है। मैं नहीं चाहता कि मेरा ऐप इन मामलों में कोई कार्रवाई करे। मैं सिर्फ यह चाहता हूं कि कोई भी मध्यवर्ती सफाई के बिना चल रहा हो क्योंकि उपयोगकर्ता ऐप से बाहर नहीं निकला था। तो, मुझे लगता है कि यह सिर्फ ApplicationDidEnterBackground में सफाई काम करने के लिए और अधिक समझ में आता है।

मैं सर्वोत्तम प्रथाओं पर आपके इनपुट की सराहना करता हूं, यह चुनने के लिए कि कौन से प्रतिनिधि जागने और सोने के लिए और साथ ही एसएमएस / कॉल द्वारा बाधित होने जैसी घटनाओं पर विचार करने के लिए लागू करने के लिए प्रतिनिधि हैं।

धन्यवाद

जवाबों:


449

जब जागना यानी किसी ऐप को पुनः लॉन्च करना (या तो स्प्रिंगबोर्ड, ऐप स्विचिंग या URL के माध्यम से) applicationWillEnterForeground:कहा जाता है। इसे केवल एक बार निष्पादित किया जाता है, जब ऐप पृष्ठभूमि में डालने के बाद उपयोग के लिए तैयार हो जाता है, जबकि applicationDidBecomeActive:लॉन्च के बाद कई बार कॉल किया जा सकता है। यह applicationWillEnterForeground:सेटअप के लिए आदर्श बनाता है जिसे केवल एक बार रिलॉन्च करने के बाद होना चाहिए।

applicationWillEnterForeground: कहा जाता है:

  • जब एप्लिकेशन relaunched है
  • इससे पहले applicationDidBecomeActive:

applicationDidBecomeActive: कहा जाता है:

  • जब एप्लिकेशन पहली बार के बाद शुरू किया गया है application:didFinishLaunchingWithOptions:
  • applicationWillEnterForeground:अगर इसके बाद संभालने के लिए कोई URL नहीं है।
  • के बाद application:handleOpenURL:कहा जाता है।
  • के बाद applicationWillResignActive:यदि उपयोगकर्ता ध्यान न दी एक फोन कॉल या एसएमएस की तरह रुकावट।

applicationWillResignActive: कहा जाता है:

  • जब वहाँ एक फोन कॉल की तरह एक व्यवधान है।
    • यदि उपयोगकर्ता कॉल लेता है तो उसे कॉल किया applicationDidEnterBackground:जाता है।
    • यदि उपयोगकर्ता कॉल applicationDidBecomeActive:को अनदेखा करता है, तो कॉल किया जाता है।
  • जब होम बटन दबाया जाता है या उपयोगकर्ता ऐप्स स्विच करता है।
  • डॉक्स का कहना है कि आपको चाहिए
    • चल रहे कार्यों को विराम दें
    • अक्षम टाइमर
    • एक खेल रोकें
    • ओपन फ्रेम दर कम करें

applicationDidEnterBackground: कहा जाता है:

  • उपरांत applicationWillResignActive:
  • डॉक्स का कहना है कि आपको:
    • साझा संसाधनों को जारी करें
    • उपयोगकर्ता डेटा को बचाएं
    • अमान्य टाइमर
    • एप्लिकेशन स्थिति को बचाएं ताकि यदि ऐप समाप्त हो जाए तो आप इसे पुनर्स्थापित कर सकें।
    • UI अपडेट अक्षम करें
  • आपके पास ऐसा करने के लिए 5 सेकंड हैं और आपको विधि को वापस करने की आवश्यकता है
    • यदि आप ~ 5 सेकंड के भीतर वापस नहीं आते हैं तो ऐप समाप्त हो जाता है।
    • आप के साथ और अधिक समय के लिए पूछ सकते हैं beginBackgroundTaskWithExpirationHandler:

आधिकारिक दस्तावेज।


10
जोड़ने के लिए एक और बात। यदि आप अपने ऐप से बैकग्राउंड ऐप लिस्ट (डबल-क्लिक होम बटन) खोलते हैं और फिर उस पर वापस लौटते हैं (अपने ऐप का पूर्वावलोकन चुनें) - -applicationWillEnterForeground:केवल कॉल नहीं किया जाएगा, -applicationDidEnterBackground:(मान लीजिए, iOS को नहीं लगता कि यह एक relaunch है)।
12

@kpower हाँ, कि बस मेरी गर्दन टूट गई ... कभी सोचा भी नहीं होगा कि उस मामले में WillterForeground को नहीं बुलाया जाएगा ...
TheEye

यह है कि applicationWillEnterForeground:पृष्ठभूमि से अग्रभूमि के लिए हर बार कहा जाएगा नहीं है ?! मुझे ऐसा कोई मामला नहीं मिल रहा है जिसे applicationDidBecomeActiveबाद में न कहा जाए ।
डेसमंड डीएआई

यह सही नहीं है। applicationWillResignActive को बिना एप्लीकेशन के भी कहा जा सकता है
।निडरबेकग्राउंड

27

आपके ऐप के जीवन चक्र को प्रबंधित करना आपके प्रश्नों के लिए सहायक है। त्वरित अवधारणा के लिए, आप उस दस्तावेज़ में आंकड़े देख सकते हैं। आप XCode विज़ार्ड द्वारा उत्पन्न कोड से टिप्पणी भी पढ़ सकते हैं। निम्नानुसार सूचीबद्ध:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    return YES;
}

- (void)applicationWillResignActive:(UIApplication *)application
{
    /*
     Sent when the application is about to move from active to inactive state. 
     This can occur for certain types of temporary interruptions (such as an 
     incoming phone call or SMS message) or when the user quits the application 
     and it begins the transition to the background state.
     Use this method to pause ongoing tasks, disable timers, and throttle down 
     OpenGL ES frame rates. Games should use this method to pause the game.
     */
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    /*
     Use this method to release shared resources, save user data, invalidate 
     timers, and store enough application state information to restore your 
     application to its current state in case it is terminated later. 
     If your application supports background execution, this method is called 
     instead of applicationWillTerminate: when the user quits.
     */
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    /*
     Called as part of the transition from the background to the active state; 
     here you can undo many of the changes made on entering the background.
     */
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    /*
     Restart any tasks that were paused (or not yet started) while the 
     application was inactive. If the application was previously in the 
     background, optionally refresh the user interface.
     */
}

- (void)applicationWillTerminate:(UIApplication *)application
{
    /*
     Called when the application is about to terminate.
     Save data if appropriate.
     See also applicationDidEnterBackground:.
     */
}

अधिक विस्तृत स्पष्टीकरण के लिए, कृपया UIApplicationDelegate के आधिकारिक दस्तावेज़ देखें


लिंक मर चुका है।
फ़्लिप्पी बोसमैन

कुछ विवरण और लिंक, 2019 को अभी के लिए संशोधित करें।
टॉमजप्सन

13

मैं अभी भी डानो के जवाब से थोड़ा उलझन में था इसलिए मैंने अपने संदर्भ के लिए कुछ परिदृश्यों में घटनाओं के प्रवाह को प्राप्त करने के लिए थोड़ा परीक्षण किया, लेकिन यह आपके लिए भी उपयोगी हो सकता है। यह उन ऐप्स के लिए है जो UIApplicationExitsOnSuspendअपने info.plist में उपयोग नहीं करते हैं । यह एक iOS 8 सिम्युलेटर + पर iOS 7 डिवाइस के साथ पुष्टि की गई थी। कृपया एक्समरीन के ईवेंट हैंडलर नामों का बहाना करें। वे बहुत समान हैं।

  • प्रारंभिक और सभी बाद में एक नहीं चल रहे राज्य से लॉन्च:

FinishedLaunching

OnActivated

  • रुकावट (फोन कॉल, टॉप स्लाइड-डाउन, बॉटम स्लाइड-अप):
  • होम बटन डबल-प्रेस लिस्टिंग निष्क्रिय ऐप्स, फिर हमारे ऐप का आकार बदल रहा है:

OnResignActivation


OnActivated

  • होम बटन डबल-प्रेस लिस्टिंग निष्क्रिय क्षुधा, एक और अनुप्रयोग का चयन, फिर हमारे app relaunching:
  • होम बटन एकल प्रेस, फिर relaunch:
  • लॉक (ऑन / ऑफ बटन), फिर अनलॉक करें:

OnResignActivation

DidEnterBackground


WillEnterForeground

OnActivated

  • होम बटन डबल-प्रेस करें, और हमारे ऐप को समाप्त करें: (बाद में रिले पहले मामला है)

OnResignActivation

DidEnterBackground

DidEnterBackground (iOS 7 केवल?)

हां, DidEnterBackgroundiOS7 डिवाइस पर दो बार कॉल किया जाता है। दोनों बार UIApplication State Background है। हालांकि, iOS 8 सिम्युलेटर नहीं है। इसके लिए iOS 8 डिवाइस पर परीक्षण की आवश्यकता है। जब मैं इस पर अपना हाथ डालूंगा, या कोई और पुष्टि कर सकता है, तो मैं अपना जवाब अपडेट करूंगा।


9

applicationWillEnterForeground कहा जाता है:

जब एप्लिकेशन को पुन: लॉन्च किया जाता है (पृष्ठभूमि से अग्रभूमि तक आता है) तो यह विधि तब लागू नहीं की जाती है जब ऐप पहली बार शुरू होता है अर्थात जब applicationDidFinishLaunchकॉल किया जाता है लेकिन केवल पृष्ठभूमि से आता है applicationDidBecomeActive

applicationDidBecomeActive कहा जाता है

जब ऐप को पहली बार लॉन्च किया जाता है उसके didFinishLaunching बाद applicationWillEnterForegroundअगर कोई URL हैंडल नहीं करना है। के बाद application:handleOpenURL:कहा जाता है। के बाद applicationWillResignActiveयदि उपयोगकर्ता ध्यान न दी एक फोन कॉल या एसएमएस की तरह रुकावट। एप्लिकेशन से कहीं भी अलर्ट दृश्य के गायब होने के बाद


क्या आप किसी भी तरह से जानते हैं कि क्या इसे iOS 7 के रूप में बदला गया था? मुझे याद है (मैं गलत किया जा सकता था) सामान (iOS 5/6) में आवेदन कर रहा थाWillEnterForeground और जब पहली बार लॉन्च किया गया था तब चल रहा था। अब तक, 7.1 / 8 में, आप सही अनुप्रयोग हैं ।WillEnterForeground लॉन्च पर कॉल नहीं करता है।
जिनेगू किम

7

जब सिस्टम अनुमति के लिए पूछ रहा है तो applicationWillResignActive को कहा जाता है। (iOS 10 में) बस मामले में किसी ने मुझे के रूप में एक ही मुसीबत में मारा ...


किसी भी विचार क्या विधि पॉप अनुमति खारिज करने के बाद कहा जाता है? मेरे पास यह मुद्दा है stackoverflow.com/questions/26059927/…
सुरेश दुरिशेट्टी

5

IOS 8+ में फोन कॉल लेने के लिए एक सूक्ष्म लेकिन महत्वपूर्ण अंतर है।

IOS 7 में यदि उपयोगकर्ता फोन कॉल लेता है तो दोनों ApplicationWillResignActive: और applicationDidEnterBackground: कहलाते हैं। लेकिन iOS 8+ में केवल applicationWillResignActive: कहा जाता है।


1

IOS 13+ के लिए निम्नलिखित विधियों को निष्पादित किया जाएगा:

- (void)sceneWillEnterForeground:(UIScene *)scene
- (void)sceneDidBecomeActive:(UIScene *)scene
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.