إرسال الدعوة إلى قائمة الانتظار الرئيسية داخل أويباكغروندتاسكيدنتيفير

StackOverflow https://stackoverflow.com//questions/22033080

سؤال

أنا تشغيل مهمة معينة تحت UIBackgroundTaskIdentifier منذ أريد تشغيله في الخلفية.رمز بلدي يبدو شيئا من هذا القبيل.

-(void) function
{

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{

        UIBackgroundTaskIdentifier BGIdentifier = [[UIApplication sharedApplication]   beginBackgroundTaskWithExpirationHandler:^{}];     

        // some processing

        dispatch_async(dispatch_get_main_queue(), ^{
            // some UI stuff
        });

        // some processing again

        dispatch_async(dispatch_get_main_queue(), ^{
            // some UI stuff again
        });

        [[UIApplication sharedApplication] endBackgroundTask:BGIdentifier];        
    });
}

لذلك لدي سؤالان.

  1. إذا انتقل تطبيقي إلى الخلفية أثناء حدوث بعض المعالجة ، فماذا سيحدث لمكالمات الإرسال إلى قائمة الانتظار الرئيسية?
  2. هل هذا تصميم جيد ?
هل كانت مفيدة؟

المحلول

ردا على سؤالك ، تعمل تلك الكتل المرسلة إلى قائمة الانتظار الرئيسية كما تتوقع ، وسيعمل كل شيء بشكل جيد ، وعندما يتم إعادة التطبيق إلى المقدمة ، سترى واجهة المستخدم محدثة بشكل صحيح.اثنين من المحاذير:

  1. سوف تحتاج إلى التأكد من أن endBackgroundTask لا يتم الاحتجاج به قبل الانتهاء من الإرسال النهائي.يمكنك تحقيق ذلك إما عن طريق:

    • اجعل إرسال واجهة المستخدم النهائي متزامنا;أو

    • تشمل endBackgroundTask باعتباره العنصر الأخير في الكتلة الأخيرة التي ترسلها إلى قائمة الانتظار الرئيسية.

    لكن توقيت هذا endBackgroundTask مهم ، فأنت تريد التأكد من تحديث واجهة المستخدم الخاصة بك قبل وضع علامة على مهمة الخلفية الخاصة بك على أنها كاملة والإشارة إلى أنه قد يتم تعليقها.

  2. لا أعرف كيف تريد التعامل مع الفشل في إكمال مهمة الخلفية ، ولكن بشكل عام يمكنك الاتصال endBackgroundTask في معالج انتهاء الصلاحية أيضا ، لأنه بخلاف ذلك سيتم إنهاء التطبيق بإيجاز إذا لم تكتمل مهمة الخلفية في الوقت المخصص.انظر ال تنفيذ مهمة ذات طول محدود في الخلفية من حالات التطبيق وتعدد المهام الفصل من دائرة الرقابة الداخلية دليل برمجة التطبيقات على سبيل المثال.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top