أفضل طريقة للخدمة التي تبدأ النشاط للتواصل معها

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

  •  20-09-2019
  •  | 
  •  

سؤال

لدي خدمة تستمع إلى مقبس. عند تلقي بعض المدخلات هو إنشاء نشاط. عند تلقي مدخلات أخرى ، فإن قتل هذا النشاط. لقد ناضلت لفترة من الوقت لجعل الخدمة تتواصل مع النشاط من خلال AIDL (http://developer.android.com/guide/developing/tools/aidl.html) ، ولكن يبدو أن هذا لا يكون فعالا. أعتقد أن AIDL فعال فقط عندما تكون العملية التي يجب التحدث إليها هي خدمة ، وليس عندما تكون نشاطًا؟ أحب بعض الاتجاهات أو الاقتراحات حول كيفية حل مشكلتي.

هتافات،

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

المحلول

لدي خدمة تستمع إلى مقبس. عند تلقي بعض المدخلات هو إنشاء نشاط.

يرجى جعل هذا قابلاً للتكوين. يجب ألا تبدأ الخدمات الأنشطة إلا في جداً ظروف غير عادية (على سبيل المثال ، المقبس هو اتصال SIP وأنت تقوم بإنشاء عميل VoIP). ظهر نشاط يقاطع المستخدم في كل ما يفعله.

عند تلقي مدخلات أخرى ، فإن قتل هذا النشاط.

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

أعتقد أن AIDL فعال فقط عندما تكون العملية التي يجب التحدث إليها هي خدمة ، وليس عندما تكون نشاطًا؟

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

أحب بعض الاتجاهات أو الاقتراحات حول كيفية حل مشكلتي.

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

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

لدى الخدمة ثم خيارات للتواصل مع العميل: عبر رد الاتصال (على سبيل المثال ، Handler في الإجابة التي قدمها السيد Smiljanić) أو عن طريق البث Intents. في حالة رد الاتصال ، سيحتاج النشاط إلى ربط الخدمة من أجل الوصول إلى واجهة برمجة التطبيقات لتوفير كائن رد الاتصال. ستتمسك الخدمة بهذا الكائن واتصاله أثناء الأحداث الرئيسية.

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

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