سؤال

لدي خدمة IDL مختلطة الحالات أستخدمها بطريقتين:

  1. ستقوم الخدمة بإنشاء سلسلة رسائل وإجراء اتصال بالشبكة للحصول على بعض محتوى XML نيابة عن النشاط.يتم إرجاع المحتوى مرة أخرى إلى النشاط من خلال IDL الخاص بالعميل الذي يحدد طرق رد الاتصال
  2. إذا اختار المستخدم خيار الإعلام، فستقوم الخدمة بإنشاء مؤقت يتم تنفيذه بشكل متكرر وإنشاء إشعار على شريط الأدوات.كما يقوم أيضًا بتخزين المحتوى مؤقتًا، لذلك عندما يطلب النشاط تحديثًا، يتم تقديمه من ذاكرة التخزين المؤقت بدلاً من مكالمة شبكة أخرى

لذلك أسئلتي هي

  1. بالنسبة للسيناريو رقم 1، ما هو السعر (إن وجد) الذي أدفعه مقابل استخدام الخدمة لمكالمات الشبكة بدلاً من إنشاء سلسلة محادثات في الخلفية مباشرة في النشاط؟
  2. بالنسبة لرقم 2 - هل من الأفضل تغيير التنفيذ إلى AlarmManager؟لقد لاحظت أنه عندما أقوم بإيقاف العمليات باستخدام TasKiller، تتوقف الخدمة الخاصة بي ولا تتم إعادة تشغيلها مطلقًا، فهل ستتمتع الوظيفة القائمة على AlarmManager بفرصة أفضل للاسترداد؟
هل كانت مفيدة؟

المحلول

للسيناريو رقم 1 ، ما هو السعر (إن وجد) الذي أدفعه مقابل استخدام خدمة مكالمات الشبكة بدلاً من إنشاء مؤشر ترابط الخلفية مباشرة في النشاط؟

أفترض أنه بما أنك قلت أن هذه "خدمة IDL"، فإن هذا هو ما أسميه خدمة عن بعد - فأنت تستخدم AIDL لتحديد واجهة يتم استخدامها عبر حدود العملية.

في هذه الحالة، تبلغ التكلفة عدة ميغابايت من ذاكرة الوصول العشوائي (RAM) للعملية الثانية، بالإضافة إلى القليل من وقت وحدة المعالجة المركزية (CPU) لتحمل IPC.يعتمد مقدار "القليل من وقت وحدة المعالجة المركزية" على عدد مرات استدعائه.

بالنسبة إلى #2 - هل من الأفضل أن أتغير التنفيذ إلى الإنذار؟

بشكل عام، نعم.ومن الناحية المثالية، تكون الخدمات في الذاكرة أقل ما يمكن.

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

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

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