سؤال

لدي شاشة تسجيل دخول المستخدم.يضغط المستخدم على زر تسجيل الدخول وأقوم بإنشاء IntentService للاتصال بخدمات الراحة الخاصة بي وإرجاع نتيجة المصادقة.

الآن هذه هي الوظيفة التي أريد تحقيقها:إذا تم إيقاف النشاط مؤقتًا (أي.يذهب إلى الخلفية) فيجب أن تظل خدمة النية قيد التشغيل، وهي تعمل.ولكن إذا استخدمت مدير المهام لإيقاف التطبيق، فيجب أن تتوقف خدمة النية، على الرغم من أن ذلك لا يحدث في الوقت الحالي.ويستمر في التنفيذ onHandleIntent حتى اكتمال.إذا اتصلت يدويًا stopSelf(), onDestroy() ويسمى ولكن onHandleIntent يستمر الأسلوب في التنفيذ.كيف أجبر onHandleIntent للتوقف؟لا يعد استدعاء "return" خيارًا لأنه قد يتم احتجازه في استدعاء أسلوب راحة واحد.

هل يجب أن أستخدم خدمة الهدف لهذه الوظيفة أو أي شيء آخر (مثل الخدمة أو المهمة غير المتزامنة)؟

هل كانت مفيدة؟

المحلول

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

لست متأكدًا من سبب عدم كون "الاتصال بالعودة" خيارًا مناسبًا لك؟أفترض أنك تقصد التحقق من وجود شرط ما، والخروج من الحلقة أو الكتلة إذا تم استيفاء الشرط.هذه هي الطريقة العامة التي يجب أن تنتهي بها سلاسل الرسائل (في الخدمات أو في أي مكان آخر) (على الرغم من وجود سلاسل أخرى اقتراب).يمكن أن يستمع مؤشر ترابط الخدمة الخاص بك إلى حدث معين قد حدث (على سبيل المثال، إذا تم تدمير النشاط، عن طريق تعيين خاصية في ملف أو قاعدة بيانات عندما يكون النشاط onDestroy يتم استدعاؤه، على الرغم من أنه إذا كان هذا هو ما تريده، فمن المحتمل ألا تستخدم الخدمة)، وبعد ذلك run() يمكن أن يعود برشاقة.

ولكن إذا كانت هذه مهمة تريد القيام بها بغض النظر عما يفعله المستخدم على جهازه (داخل تطبيقك أو خارجه)، فيجب أن تكون مهمة لا ينبغي مقاطعتها من الخارج.يجب أن يستمر حتى يتم الانتهاء منه.

ربما لو كان بإمكانك تحديد الوقت الذي تريد إيقاف هذه الخدمة فيه بشكل أفضل؟

نصائح أخرى

وقفه في الخاص بك onDestroy() طريقة

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