سؤال

أقوم بتحرير كود تطبيق Android الذي يجري مكالمات GPS في الخدمة.LocationListener.ويستخدم أيضا ServiceConnection

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

أفترض فقط أن هذا مرتبط بخدمة GPS حيث يتم تشغيلها عند حدوث هذه المشكلة.

سمعت أن هذه المشكلة تتعلق بسلسلة محادثات تعمل على UIthread، بدلاً من سلسلة محادثات في الخلفية.لكنني كنت متأكدًا من أن الخدمات تعمل بشكل غير متزامن في سلسلة محادثات الخلفية.

البصيرة موضع تقدير

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

المحلول

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

يمكنك تحديد الخدمة ليتم تشغيلها على عملية مختلفة ولكن أفضل الممارسات هي إنشاء سلسلة رسائل جديدة في الخدمة.

المزيد عن خدمة أندرويد على:http://developer.android.com/reference/android/app/Service.html

نصائح أخرى

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

لا يزال من الممكن أن تتسبب المعالجة في إحدى الخدمات في تعليق تطبيقك.

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

تعد AsyncTask طريقة ملائمة لذلك حيث يمكنك التعامل مع واجهة المستخدم في وظائف onPreExecute وonPostExecute.

يمكنك تنفيذ AsyncTask مباشرةً في خدمتك كفئة فرعية.

نأمل أن يساعد هذا!هتافات

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