سؤال

أنا جديد على فكرة Wakelock وأحتاج إلى مساعدتك.

أسئلة:

  1. أفترض أن يكون Wakelock نوعًا من القفل والذي عند الاحتفاظ به من قبل الرمز التنفيذي يمنع الجهاز من النوم. ماذا لو كان الجهاز بالفعل في وضع النوم/الاستعداد ، هل سيتم تنفيذ الكود بعد ذلك؟ على افتراض أنها لن تحصل أبدًا على wakelock؟

  2. عندما تتم مهمة طويلة المدى (ABT 7-8 ثانية) في موضوع خلفية (Asynctask) هل يجب أن أزعجني من حمل Wakelock؟ هل Asynctask قد اكتسبت بالفعل من أجلي؟

  3. يتم تقدير الروابط إلى الوثائق الرسمية والكتابة على Wakelocks.

شكرًا.

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

المحلول

1. إذا كان الهاتف في وضع النوم الكامل ، بصرف النظر عن مكالمة هاتفية واردة ، يمكنك استخدام نية الإنذار لإيقاظ الهاتف.

من المنبه وثائق الفصل:

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

2. إذا كنت تعمل مع Asynctask, ، سترغب في نشر نتائج على موضوع واجهة المستخدم على onPostExecute()

من Asynctask توثيق:

يتيح Asynctask الاستخدام السهل والسهل لخيط واجهة المستخدم. هذه الفئة يسمح بإجراء عمليات الخلفية ونشر النتائج على موضوع واجهة المستخدم دون الحاجة إلى معالجة المواضيع و/أو المعالجات.

3. أقترح أن تقرأ في الوثائق الرسمية لـ مدير الطاقة الذي يعطي مقدمة جيدة لمفهوم Wakelock.

نصائح أخرى

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

  2. مع ال AsyncTask الذي بدأه المستخدم ، لا داعي للقلق حقًا بشأن wakelocks. من غير المحتمل أن ينام الهاتف أثناء تشغيله. لست متأكدًا مما إذا كانوا يحصلون على wakelock ، ولكن وضع هاتفي للنوم أثناء تشغيل معيار AsyncTask لا يبدو أنه يقطعها.

  3. كما قال ستيد ، تحقق من ذلك: http://developer.android.com/reference/android/os/powermanager.html

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

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