كيفية التعامل مع دورة حياة نشاط Android عند الاستيقاظ (تطبيق الإنذار)

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

سؤال

أواجه بعض المشاكل في تطبيق إنذار أقوم بتطويره.

أول ما أعتقد أنه غريب بعض الشيء هو أنه عندما ينطلق المنبه ويستيقظ الهاتف. هذه الأشياء تحدث.

oncreate
onresume
onpause
onresume

لماذا يركضون بهذا الترتيب؟ لا ينبغي استدعاء آخر اثنين؟ وهذا هو ما يسبب لي مشكلة كبيرة ، لأنه عندما أضغط على المنزل أو العودة على الهاتف ، يتم تشغيل OnPause ، والذي أريد أن أتصل به من النهاية (). وهذا الجزء يعمل كما ينبغي ، لكن هذا لا يعمل عندما يستيقظ الهاتف من Bacause من مكالمة OnPause ...

أيه أفكار؟

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

المحلول

أود أن أقترح عليك أن تنظر في كيفية معالجة تطبيق الإنذار الرسمي للأحداث:https://android.googlesource.com/platform/packages/apps/deskclock

نصائح أخرى

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

onrestart onstart onresume onpause onnewintent onresume

كما ترون ، لديّ onresume و onpause وآخر onresume وجاء النشاط إلى المستخدم.

يبدو ذلك لأننا نستخدم نشاط Singletop أو SingleInstance (ربما يظهر أيضًا على Singletask). المشكلة هي أنه عندما ترسل نية إلى نشاط Singletop الذي تم إنشاؤه بالفعل ، فإن نيتك النية الجديدة نشطة طريقة OnNewIntent (). من API يمكنك أن ترى ذلك:

سيتم دائمًا إيقاف النشاط قبل تلقي نية جديدة ، حتى تتمكن من الاعتماد على onResume () يتم استدعاؤها بعد هذه الطريقة.

لذلك ربما هذا هو السبب في تلقي مكالمات onresume-onpause-onresume.

لكن هذا سلوك غريب!

هل تريد حقًا الاتصال بـ Finish () في OnPause ()؟ يتم استدعاء OnPause () عندما لا يكون النشاط الحالي في المقدمة بعد الآن. ربما تريد استدعاء Finish () بطريقة OnStop () بدلاً من ذلك. انظر Activity lifecycle للتفاصيل.

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