سؤال

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

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

الطريقة البديلة التي يمكنني حلها هي أنه إذا كنت أعرف قائمة من الإنذارات الموجودة لإيقاظ خدمة ، كما كنت أعرف ما إذا كان التطبيق قيد التشغيل بالفعل أم لا.

إذا كنت ترغب في رؤية رمز مصدر التطبيق أو تشغيل ملف ثنائي ؛ يرجى إلقاء نظرة على جيثب التالي عنوان URL

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

شكرا مقدما.

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

المحلول

أنا لست في المنزل ، لذلك سيكون هذا قصيرًا حتى أتمكن من التعديل لملء.

أولاً ، أعتقد أنه يمكنك إعداد مجموعة كبيرة لإعلامك على تثبيت الحزمة للإعداد الأولي.

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

نصائح أخرى

لاحظ أن المكالمات startService() لا تعشش: بغض النظر عن عدد المرات التي تتصل فيها startService() إذا لم تكن هذه الخدمة قيد التشغيل بالفعل ، فسيتم إنشاء مثيل لها وبدءها (إنشاء عملية لها إذا لزم الأمر) ؛ إذا كان قيد التشغيل ، فسيظل قيد التشغيل.

كل مكالمة إلى هذه الطريقة ستؤدي إلى مكالمة مطابقة للخدمة المستهدفة onstart(القصد ، int) طريقة ، مع النية الواردة هنا.

يمكنك بسهولة الحصول على علم منطقي في خدمتك شيء مثل: isScheduled والتي يمكنك التحقق منها لتحديد جدولة المهام المتكررة أو عدمه عند تلقي الحدث.

وأخيراً إذا كنت بحاجة إلى خدمة تعمل طوال الوقت ، فيجب أن تبدأ في Application الفصل ، بغض النظر عن عدد المرات. أنت تفعل الفرق في onStart طريقة الخدمة.

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