سؤال

لدي تطبيق أندرويد يرتبط نفسه بخدمة عن بعد بمجرد بدء تشغيل التطبيق. توفر الخدمة البعيدة تجريدا كاميرا فيديو Bluetooth حتى نتمكن من إرسال الأوامر واستقبال الأحداث منه بسهولة. يحدث التلزام من Application نفسه بدلا من Activity. من المهم بالنسبة لي أن تكون اتصال الكاميرا مع Bluetooth نشطا أن تطبيقي يبقى قيد التشغيل حتى أتمكن من تلقي الأحداث من الخدمة البعيدة. السبب الرئيسي هو أنني بحاجة لمعرفة ما إذا كان تسجيل أم لا، وإذا كان الأمر كذلك، أحتاج إلى إرسال إحداثيات GPS بشكل دوري.

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

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

المحلول

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

from http://developer.android.com/Reference/android /app/activity.html#processliefcleIction :

دورة دورة حياة

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

  1. المقدمة النشاط (النشاط الموجود في الجزء العلوي من الشاشة التي يتفاعل بها المستخدم حاليا مع) أهمها. لن يتم قتل عمليةها إلا كملاذ أخير، إذا كانت تستخدم ذاكرة أكبر مما هو متاح على الجهاز. بشكل عام في هذه المرحلة، وصل الجهاز إلى حالة ترحيل الذاكرة، لذلك هذا مطلوب من أجل الحفاظ على واجهة المستخدم استجابة.
  2. a مرئية النشاط (نشاط مرئي للمستخدم ولكن ليس في المقدمة، مثل واحد يجلس خلف مربع حوار مقدمة) يعتبر مهم للغاية ولن يقتل ما لم يكن ذلك مطلوبا للحفاظ على النشاط الأمامي يعمل.
  3. a الخلفية نشاط (نشاط غير مرئي للمستخدم وقد تم إيقاف مؤقتا) لم يعد أمرا بالغ الأهمية، لذلك قد يقتل النظام بأمان لعملائه لاستعادة الذاكرة لعمليات مقدمة أو مرئية أخرى وبعد إذا كانت عمليةها تحتاج إلى مقتل، عندما يتنقل المستخدم مرة أخرى إلى النشاط (مما يجعله مرئيا على الشاشة مرة أخرى)، سيتم استدعاء طريقة OnCreate (Bundle) مع SaveDinstanCestate التي قدمتها مسبقا في OnSaveInstanCestate (Bundle) بحيث يمكن إعادة تشغيل نفسها في نفس الحالة حيث تركت المستخدم الأخير.
  4. عملية <قوية> عملية فارغة هي واحدة استضافة أي أنشطة أو مكونات تطبيق أخرى (مثل فئات الخدمة أو BroadCastReceiver). هذه قتلت بسرعة كبيرة من قبل النظام حيث تصبح الذاكرة منخفضة. لهذا السبب، يجب تنفيذ أي عملية خلفية تقوم بها خارج النشاط في سياق نشاط BroadCastReceiver أو خدمة للتأكد من أن النظام يعرف أنه يحتاج إلى الحفاظ على عمليتك حولها.
  5. في بعض الأحيان قد يحتاج النشاط إلى القيام بعملية طويلة الأمد موجودة بشكل مستقل عن دورة حياة النشاط نفسها. قد يكون مثالا تطبيقا كاميرا يسمح لك بتحميل صورة إلى موقع ويب. قد يستغرق التحميل وقتا طويلا، ويجب أن يسمح التطبيق للمستخدم بمغادرة التطبيق سوف يتم تنفيذها. لإنجاز هذا، يجب أن يبدأ نشاطك خدمة يتم فيها التحميل. يتيح ذلك للنظام إعطاء الأولوية لعمليتك بشكل صحيح (بالنظر إلى أنه أكثر أهمية من التطبيقات الأخرى غير المرئية) طوال مدة التحميل، مستقلة عن ما إذا كان النشاط الأصلي متوقف مؤقتا أو توقف أو ينتهي.

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